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/
