이 포스트는 인프런의 "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
를 처음 다루는 입장에서는 오히려 너무 추상화된 코드들이 와닿지 않을 것이고 나 역시도 활용하는데 어려움을 겪었기 때문에 이번에 강의를 통해서 다시 내용을 정리하려 한다.