[Django] DRF(Django-Rest-Framework) Tutorial

황인용·2020년 9월 5일
0

Django

목록 보기
13/13
post-custom-banner

DRF(Django-Rest-Framework) Tutorial

참고

0. 가상 환경 설정

(base) ~> conda create -n DRF python=3.7
(base) ~> conda activate DRF
(DRF)  ~> 

1. project directory 만들기

(DRF) ~>  mkdir DRFtutorial
(DRF) ~>  cd DRFtutorial
(DRF) DRFtutorial>

2. Django-Rest-Framework 설치 및 project 및 app 생성

## DRF 패키지 설치 ##
(DRF) DRFtutorial> pip install djangorestframework

## project 생성 ##
(DRF) DRFtutorial> python manage.py startproject DRFtutorial .

## App 생성 ##
(DRF) DRFtutorial> python manage.py startapp quickstart

3. settings.py 설정

DRFtutorial/settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'quickstart',
]
...
...
## REST_FRAMEWORK 추가 ##
REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 10,
}
  • 설치한 django-rest-frameworkqucikstartINSTALLED_APPS에 추가한다
  • REST_FRAMEWORK부분을 추가하는데, pagination 부분을 추가한다

4. migrate & super user

## 초기 migrate ##
(DRF) DRFtutorial> python manage.py migrate

## super user 생성 ##
(DRF) DRFtutorial> python manage.py createsuperuser
Email address:
Password:
Password(again):
Superuser created successfully

5. quickstart/serializers.py

quickstart/serializers.py

from django.contrib.auth.models import User, Group
from rest_framework import serializers


class UserSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = User
        fields = ['url', 'username', 'email', 'groups']


class GroupSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Group
        fields = ['url', 'name']
  • serializerdjango가 제공하는 model(모델)인 User, Group을 가져와서 framework가 활용가능한 데이터형태로 직렬화 한다
  • 즉, serializer는 model(모델)을 통해 가져온 queryset을 JSON, XML 또는 다른 컨텐츠 유형으로 변환할 수 있는 부분이다.
  • 반대로 Deserialize은 queryset으로 돌려주는 역직렬화이다

6. quickstart/views.py

quickstart/views.py

from django.contrib.auth.models import User, Group
from rest_framework import viewsets
from .serializers import UserSerializer, GroupSerializer


class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all().order_by('-date_joined')
    serializer_class = UserSerializer
    

class GroupViewSet(viewsets.ModelViewSet):
    queryset = Group.objects.all()
    serializer_class = GroupSerializer
  • UserViewSet, GroupViewSet 각각 ViewSet을 이용하여 View를 만든다.
  • 각 View에서는 model(모델)을 가져와서 queryset으로 만든다.
  • queryset과 serializer만 선언해도 자동적으로 설정이 된다.

7. DRFtutorial/urls.py

DRFtutorial/urls.py

from django.urls import include, path
from rest_framework import routers
from quickstart.views import UserViewSet, GroupViewSet

router = routers.DefaultRouter()
router.register(r'users', UserViewSet)
router.register(r'groups', GroupViewSet)

urlpatterns = [
    path('', include(router.urls)),
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),
]
  • rest_framework의 routers의 DefaultRouter를 사용
  • users, groups를 각각의 ViewSet에 매핑하여 router에 등록
  • api-auth/ 부분은 api 페이지에서의 로그인/로그아웃을 다루기 위해 추가된 부분

8. 서버 실행 및 request

서버 실행

(DRF) DRFtutorial> python manage.py runserver

API ROOT request

User request

(base) client> http -a admin:password123 http://127.0.0.1:8000/users/

HTTP/1.1 200 OK
...
{
    "count": 2,
    "next": null,
    "previous": null,
    "results": [
        {
            "email": "admin@example.com",
            "groups": [],
            "url": "http://localhost:8000/users/1/",
            "username": "paul"
        },
        {
            "email": "tom@example.com",
            "groups": [                ],
            "url": "http://127.0.0.1:8000/users/2/",
            "username": "tom"
        }
    ]
}

User List request

(base) client> http http://127.0.0.1:8000/users/

user detail request

(base) client> http http://127.0.0.1:8000/users/1

profile
dev_pang의 pang.log
post-custom-banner

0개의 댓글