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/

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です