その他

Django REST framework 入門

その他
この記事は約5分で読めます。

元ネタ

Django REST framework
Django, API, REST

前提条件

pyenv, pipenv, python がインストールされていること

Mac でPython の開発環境を構築する

セットアップ

パスワードは例です。

mkdir tutorial
cd tutorial
pipenv install
pipenv install django
pipenv install djangorestframework

pipenv shell
django-admin startproject tutorial .
cd tutorial
django-admin startapp quickstart
cd ..

python manage.py migrate
python manage.py createsuperuser --email admin@example.com --username admin
password123

シリアライザ (Serializer)

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']

ビュー (ViewSet)

tutorial/quickstart/views.py を修正

from django.shortcuts import render

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]

URL

tutorial/urls.py を修正

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)

urlpatterns = [
    path('', include(router.urls)),
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),
    path('admin/', admin.site.urls),
]

ページネーションの設定

tutorial/settings.py に追記する

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 10
}

INSTALLED_APPS の修正

tutorial/settings.py を修正する

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
]

APIのテスト

以下を実行

python manage.py runserver

http://127.0.0.1:8000 にアクセス

image.png

右上のLog in からログイン

image.png

それぞれのURLから、get、postなどをテストすることができる