DRF 공식문서 예제 따라하고 분석하기

guswls·2022년 8월 1일
0

DRF 시리즈

목록 보기
2/5
post-thumbnail

이 포스트는 인프런의 "Django REST Framework 핵심사항"강의를 듣고 제작하였습니다.

지금부터 DRF공식사이트의 example을 따라해보려고 한다.

1. Example 따라하기


1-1. DRF설치

pip install djangorestframework

1-2. INSTALLED_APPS에 명시

#config > settings.py

INSTALLED_APPS = [
    #기본 앱
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    
    #생성한 앱
    'blog.apps.BlogConfig',
    'api.apps.ApiConfig',
    
    #설치한 앱
    'rest_framework',
]

1-3. DEFAULT_PERMISSION_CLASSES 추가

#config > setting.py

REST_FRAMEWORK = {
    # Use Django's standard `django.contrib.auth` permissions,
    # or allow read-only access for unauthenticated users.
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
    ]
}

1-4. urls.py에 코드 복사

#congig > urls.py

from django.urls import path, include
from django.contrib.auth.models import User
from rest_framework import routers, serializers, viewsets

# Serializers define the API representation.
class UserSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = User
        fields = ['url', 'username', 'email', 'is_staff']

# ViewSets define the view behavior.
class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer

# Routers provide an easy way of automatically determining the URL conf.
router = routers.DefaultRouter()
router.register(r'users', UserViewSet)

# Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
urlpatterns = [
    path('', include(router.urls)),
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

1-5. python manage.py runserver

이런 화면이 보이면 성공이다


2. Example 분석


화면에 보이는 "http://127.0.0.1:8000/users/" 에 들어가면 다음과 같은 화면을 확인할 수 있다. JSON형식으로 되어있는 정보는 현재 createsuperuser를 통해 만들어놓은 admin계정이다.

각 항목들을 분석하면 다음과 같다

여기서 로그인을 실행하면 아래와 같이 POST요청을 통해서 user를 생성할 수도 있다.

그리고 url항목을 통해서 접근한 상세정보에서 아래와 같이 DELETE, PUT요청도 보낼 수 있다.

즉 우리가 아까 example에서 복사한 코드로 인해서 CRUD opration을 할 수 있도록 API가 설계된 것이다.


4. 알아야 할 점


1. Default 응답 형식

DRF는 우리가 browser, 즉 DRF에서 제공되는 기본페이지에서 요청을 보낼 경우는 Default로 api로 응답을 보내주지만 다른 클라이언트, 즉 vue.js, react.js, postman에서 보낼 때는 Json형식으로 응답을 해준다.

2. 명칭

DRF공식문서에서는 이번에 우리가 알아본 것들을 Browsable API, 즉 눈으로 확인할 수 있는 API라고 부른다. 즉 API mode == Brosable API라고 보면 된다.

3. 인증

우리가 1-3에서 추가한 DEFAULT_PERMISSION_CLASSESDRF에서 사용할 기본 인증을 지정해준 것이다.
우리가 지정해준 DjangoModelPermissionsOrAnonReadOnly의 의미는 일반 사용자는 GET요청만 보낼 수 있으며 로그인한 사용하는 CRUDoperation을 모두 수행할 수 있게 하는 것이다.


3. 총정리


우리가 복붙한 코드로 인해서 설계된 API는 다음과 같은 동작을 수행하게 된다.

/users/ : Create, Read
/users/pk : Update, Delete, Read

우리가 1-5에서 복붙한 몇 줄 안되는 코드로 인해 user에 대한 CRUD operation이 되는 것이 상당히 놀라울 것이다.

하지만 오히려 DRF를 처음 다루는 입장에서는 오히려 너무 추상화된 코드들이 와닿지 않을 것이고 나 역시도 활용하는데 어려움을 겪었기 때문에 이번에 강의를 통해서 다시 내용을 정리하려 한다.

profile
안녕하세요

0개의 댓글