Django Rest Framework - Quickstart



DRF?


DjangoでのRESTful APIサーバの簡単な導入を支援する、オープンソース・ライブラリ.

RESTful


Representational State Transfer
APIは、httpのurlおよびhttpメソッド(GET、POST、PUT、DELETE)を使用することによって、
システムアーキテクチャ.

Django Tutorial

django-admin startproject tutorial .
django-admin startapp quickstart

python manage.py migrate

python manage.py createsuperuser

pip install djangorestframework
INSTALL_APPS = [
	...
    'rest_framework',
]

Serializerの作成


シーケンサを定義します.
# 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')
ハイパーリンクのHyperlink ModelSerializerを使用しており、その他は使用可能です.
ハイパーリンクはとても良いRESTfulデザインです.

Views.pyの作成

Viewsetsは論理を簡略化した.
# 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):
    queryset = User.objects.all().order_by('-date_joined')
    serializer_class = UserSerializer
    permission_classes = [permissions.IsAuthenticated]

class GroupViewSet(viewsets.ModelViewSet):
    queryset = Group.objects.all()
    serializer_class = GroupSerializer
    permission_classes = [permissions.IsAuthenticated]

urls.pyの作成

# tutorial/urls.py

from django.contrib import admin
from django.urls import include, path
from rest_framework import routers
from quickstart import views 	#이 부분 수정함
 
router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
router.register(r'groups', views.GroupViewSet)
 
# 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')),
    path('admin/', admin.site.urls),
]
将来使用するビューではなくviewsetsを使用するため、viewsetsをルータクラスに簡単に登録できます.
url confを自動的に作成できます.

Pagination


ページングでは、ユーザーがページ内のオブジェクトの数を制御できます.
ページングを追加するには、次のコードを設定します.pyに追加すればいいです.
REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 10
}