Django REST frameworkを使ってサクッとWeb APIを作る

Djangoでモデルデータの一覧を取得するだけのWeb APIを今回作ってみます。

Djangoには「Django REST framework」という便利なモジュールが公開されておりサクッとでAPIを作る事が可能です。

モデル定義

名前と属するグループを管理する事を想定したMeiboモデルを定義します。「meibo」というアプリケーション内に定義しています。
今回はこのモデルから名前(name)とグループ(group)の一覧をAPIを通して取得したいと思います。

meibo/models.py
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
settings.pyに以下赤字を追加
settings.py
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をエンドポイントに従ってコーディングします。

proj/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')),  # 追加
]

 

meibo/urls.py
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を継承したクラスを作って、その中にクエリセットとシリアライザーを指定します。

meibo/views.py
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の橋渡しをしてくれます。

meibo/serializers.py
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)を綺麗に整形して画面表示してくれます。

DRF_レスポンス画面

Django REST frameworkの公式サイト
https://www.django-rest-framework.org/

sponsor