Djangoでモデルデータの一覧を取得するだけのWeb APIを今回作ってみます。
Djangoには「Django REST framework」という便利なモジュールが公開されておりサクッとでAPIを作る事が可能です。
モデル定義
名前と属するグループを管理する事を想定したMeiboモデルを定義します。「meibo」というアプリケーション内に定義しています。
今回はこのモデルから名前(name)とグループ(group)の一覧をAPIを通して取得したいと思います。
from django.db import models class Meibo(models.Model): """名簿モデル""" name = models.CharField(verbose_name='名前', max_length=50) group = models.CharField(verbose_name='グループ', max_length=1) created_at = models.DateTimeField(verbose_name='作成日時', auto_now_add=True) updated_at = models.DateTimeField(verbose_name='更新日時', auto_now=True) class Meta: verbose_name_plural = 'Meibo' def __str__(self): return self.name
Django REST frameworkの導入
Django REST frameworkをインストールする。
pip install djangorestframework
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'meibo.apps.MeiboConfig', # meiboアプリケーション
'rest_framework', # 追加
]
マイグレートする。
$ python3 manage.py migrate
API処理のコーディング
Meiboモデルのデータ一覧を取得するAPIのエンドポイントは、「api/v1/meibo/」とします。
プロジェクトとmeiboアプリケーションのurls.pyをエンドポイントに従ってコーディングします。
from django.urls import path
from . import views
app_name = 'attendance'
urlpatterns = [
path('admin/', admin.site.urls),
path('api/v1/meibo/', include('meibo.urls')), # 追加
]
from django.urls import path from . import views app_name = 'meibo' urlpatterns = [ path('', views.MeiboListAPIView.as_view(), name="meibo"), ]
Django REST frameworkのViewは色々とありますが、今回はListAPIViewというモデルの一覧を取得できるものを使います。
ListAPIViewを継承したクラスを作って、その中にクエリセットとシリアライザーを指定します。
from rest_framework import generics from .models import Meibo from .serializers import MeiboSerializer class MeiboListAPIView(generics.ListAPIView): queryset = Meibo.objects.all() serializer_class = MeiboSerializer
シリアライザーを定義します。これでモデルとjsonの橋渡しをしてくれます。
from rest_framework import serializers from .models import Meibo class MeiboSerializer(serializers.ModelSerializer): class Meta: model = Meibo fields = ('name', 'group',)
APIの稼働
開発サーバーを起動します。
$ python3 manage.py runserver
APIのエンドポイント「http://localhost:8000/api/v1/meibo/」にアクセスすると、Django REST frameworkがレスポンス(json)を綺麗に整形して画面表示してくれます。
Django REST frameworkの公式サイト
https://www.django-rest-framework.org/