이 포스트는 인프런의 "Django REST Framework 핵심사항"강의를 듣고 제작하였습니다.
지금부터 DRF공식사이트의 example을 따라해보려고 한다.
pip install djangorestframework
#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',
]
#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'
]
}
#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'))
]
이런 화면이 보이면 성공이다
화면에 보이는 "http://127.0.0.1:8000/users/" 에 들어가면 다음과 같은 화면을 확인할 수 있다. JSON형식으로 되어있는 정보는 현재 createsuperuser를 통해 만들어놓은 admin계정이다.
각 항목들을 분석하면 다음과 같다 
여기서 로그인을 실행하면 아래와 같이 POST요청을 통해서 user를 생성할 수도 있다.
그리고 url항목을 통해서 접근한 상세정보에서 아래와 같이 DELETE, PUT요청도 보낼 수 있다.
즉 우리가 아까 example에서 복사한 코드로 인해서 CRUD opration을 할 수 있도록 API가 설계된 것이다.
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_CLASSES는DRF에서 사용할 기본 인증을 지정해준 것이다.
우리가 지정해준DjangoModelPermissionsOrAnonReadOnly의 의미는 일반 사용자는GET요청만 보낼 수 있으며 로그인한 사용하는CRUDoperation을 모두 수행할 수 있게 하는 것이다.
우리가 복붙한 코드로 인해서 설계된 API는 다음과 같은 동작을 수행하게 된다.
/users/:Create,Read
/users/pk:Update,Delete,Read
우리가 1-5에서 복붙한 몇 줄 안되는 코드로 인해 user에 대한 CRUD operation이 되는 것이 상당히 놀라울 것이다.
하지만 오히려 DRF를 처음 다루는 입장에서는 오히려 너무 추상화된 코드들이 와닿지 않을 것이고 나 역시도 활용하는데 어려움을 겪었기 때문에 이번에 강의를 통해서 다시 내용을 정리하려 한다.