dayjournal memo

Total 992 articles!!

Django #005 – API構築

Yasunori Kirimoto's avatar

画像



APIを構築するメモ。

  • Python v3.6.0
  • Django v2.2.1
  • Django REST framework v3.9.3


Django REST frameworkをインストール

pip install djangorestframework


インストール済みパッケージを確認

pip freeze

画像



サンプルとして「api」アプリケーションを追加

python manage.py startapp api

画像


アプリケーションが作成されているか確認

画像



作成されたアプリケーションをDjango REST framework用に整理

画像



プロジェクトを修正


/config/settings.py

# -- 上部省略 --

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    #sampleアプリケーションをプロジェクトに追加
    'sample.apps.SampleConfig',
    #apiアプリケーションをプロジェクトに追加
    'api.apps.ApiConfig',
    #Django REST frameworkを読み込み
    'rest_framework'
]

# -- 下部省略 --

/config/urls.py

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('admin/', admin.site.urls),
    #sampleアプリケーションのURLconf読み込み
    path('sample/', include('sample.urls')),
    #apiアプリケーションのURLconf読み込み
    path('api/', include('api.urls'))
]


「api」アプリケーションを設定


/api/serializers.py

from rest_framework import serializers
#モデルインポート
from sample.models import MainList
from sample.models import SubList

#メインリストシリアライザ
class MainListSerializer(serializers.ModelSerializer):
    class Meta:
        model = MainList
        #取得フィールド設定
        fields = ('title', 'datetime')

#サブリストシリアライザ
class SubListSerializer(serializers.ModelSerializer):
    class Meta:
        model = SubList
        #取得フィールド設定
        fields = ('title', 'totalnum')

/api/views.py

from rest_framework import viewsets
#モデルインポート
from sample.models import MainList
from sample.models import SubList
#シリアライズインポート
from .serializers import MainListSerializer
from .serializers import SubListSerializer

#メインリストビュー(GETのみ)
class MainListViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = MainList.objects.all()
    serializer_class = MainListSerializer

#サブリストビュー(GETのみ)
class SubListViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = SubList.objects.all()
    serializer_class = SubListSerializer

/api/urls.py

from django.urls import path, include
from rest_framework import routers
#ビューインポート
from . import views

#ルーター設定
router = routers.DefaultRouter()
router.register('mainlist', views.MainListViewSet)
router.register('sublist', views.SubListViewSet)

app_name = 'api'
urlpatterns = [
    #ルーターを読み込み
    path('', include(router.urls)),
]


簡易サーバー起動

python manage.py runserver

http://127.0.0.1:8000/api」にアクセスしAPIコンソールを表示

画像


http://127.0.0.1:8000/api/mainlist」にアクセスしAPIコンソールを表示

画像


http://127.0.0.1:8000/api/sublist」にアクセスしAPIコンソールを表示

画像



book

Q&A