DRF 예제를 계속 이어나가보자.
2021.10.12 - [Python/DRF] - DRF 개념 정리
2021.10.12 - [Python/DRF] - DRF Example 01. 프로젝트 생성
2021.10.12 - [Python/DRF] - DRF Example 02. Serializer & Views & URLs & Pagination & setting
이번 글에서는 Serializer, Views, URLs, Pagination, rest_framework setting 을 진행한다.
여기까지 마치면 quick start 예제는 마무리된다.
코드를 타이핑하는 부분이 존재하는데
import 하는 class 나 function 명을 보며 어떤 역활을 하는지 유추해보면 이해에 도움이 될 것이라 생각된다.
Serializers
Serializer 는 Byte Stream 을 python data type 으로 변환하거나
python data type 을 Byte Stream 으로 변환해주는 역활을 한다.
deserialize 는 View 로 입력된 데이터를 validating 과정을 거친 후 재전송 할 때 사용할 수 있다.
예제를 따라가보자.
tutorial\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']
예시에서는 HyperlinkedModelSerializer 를 상속받은 클래스를 생성한다.
이 클래스들을 통해 User 및 Group 정보를 Serialize 한다.
Views
View 는 Client 의 요청을 받고 Model 에 데이터를 요청 후 받은 데이터를 Client 에 전달하는 역활을 한다.
tutorial\quickstart\views.py 파일 오픈 후 코드입력
from django.contrib.auth.models import User, Group
from rest_framework import viewsets
from rest_framework import permissions
from tutorial.quickstart.serializers import UserSerializer, GroupSerializer
class UserViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows users to be viewed or edited.
user 정보를 읽거나 수정할 수 있다.
"""
queryset = User.objects.all().order_by('-date_joined')
serializer_class = UserSerializer
permission_classes = [permissions.IsAuthenticated]
class GroupViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows groups to be viewed or edited.
group 정보를 읽거나 수정할 수 있다.
"""
queryset = Group.objects.all()
serializer_class = GroupSerializer
permission_classes = [permissions.IsAuthenticated]
ModelViewSet 을 상속받으며 각각 User 와 Group 을 관리하는 ViewSet Class 를 생성해주었다.
기본적으로 queryset 과 serializer_class, permission_classess 사용하는 듯 하다.
read 후 validate 과정을 거치고 edit 까지 할 수 있는 역활이다.
URLs
URLs 는 router 라고 생각하면 편하다.
urlpatterns 를 등록하고 url 들을 사용하면 된다.
tutorial\urls.py 파일 오픈 후 코드입력
"""
tutorial URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/3.2/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import include, path
from rest_framework import routers
from tutorial.quickstart import views
router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
router.register(r'groups', views.GroupViewSet)
# Wire up out API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
urlpatterns = [
path('admin/', admin.site.urls),
path('', include(router.urls)),
path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
quick start 에 적힌 설명을 좀 읽어보았다.
예제에서 views 대신 viewsets 를 사용하였기 때문에 URL 을 자동으로 generate 해준다.
간단히 viewsets 를 router class 에 register 후 urlpatterns 에 등록해주면 된다.
class-based views 를 작성하면 URL conf 를 명시적으로 작성해줘야된다.
api-auth 를 추가한 것은 옵션이며 로그인과 로그아웃 view 를 추가해준 것임.
class-based view 가 편한지 viewset 이 편한지.
어떤 게 더 범용적인지 추후에 찾아봐야 될듯하다.
Pagination
tutorial\settings.py 가 설정을 담당한다.
REST_FRAMEWORK 옵션 추가
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10
}
Settings
tutorial\settings.py 가 설정을 담당한다.
INSTALLED_APPS 에 'rest_framework' 를 추가해주자.
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10
}
여기까지 했으면 quick start 기준 예시는 끝났다.
이제 작성한 API 를 테스트해보자.
서버를 기동
$ python manage.py runserver
curl command 로 API 테스트
새로운 cmd 오픈
$ curl -H 'Accept: application/json; indent=4' -u admin:password123 http://127.0.0.1:8000/users/
결과를 확인할 수 있다.
현재 admin 외의 user 가 없기 때문에 admin 만 나온다.
또한 기본적으로 Swagger 를 통한 Document 를 생성하는데 http://127.0.0.1:8000/users/ 에서 확인할 수 있다.
위 화면이 나온다면 우측 상단의 Log in 으로 관리자로 접속해보자.
예시를 따라했다면 admin / password123 으로 접속할 수 있을 것이다.
로그인을 완료하면 위와 같은 화면이 나온다.
views.py 에서 작성해준 주석의 내용이 나온 것을 확인할 수 있다.
여기까지 DRF quick start 기반 예제를 마칩니다.
추후 다른 Database 연동 및 CRUD 테스트, REST 요청 별 작성법에 대해 다뤄볼 예정입니다.
'Python > DRF' 카테고리의 다른 글
DRF Example 01. 프로젝트 생성 (0) | 2021.10.12 |
---|---|
DRF 개념 정리 (0) | 2021.10.12 |
최근댓글