- Django REST frameworkの使い方とは?
- APIを爆速で作成するには?
本記事ではこのような疑問を解決します。
SPA開発が主流となっているWeb開発では、Web APIの作成がマストと言って良いでしょう。
さらに、WebフレームワークとしてDjangoを採用している場合、
Django REST frameworkはWeb APIを作るための強力な武器になります。
そこで今回はDjango REST frameworkの基本的な使い方について解説していきます。
なお、Django REST frameworkそのものについてはこちらの記事で解説しているので参考にしてみてください。
Django REST frameworkとは?Web APIとは?Django REST frameworkを使うことで何がいいの? 本記事ではこのような疑問を解決します。今回はDjango REST frameworkについて。[…]
前提条件
前提となるファイル構成は以下の通りです。
project ├── app │ ├── __init__.py │ ├── admin.py │ ├── apps.py │ ├── migrations │ │ └── (中身省略) │ ├── models.py │ ├── tests.py │ ├── views.py │ └── serializers.py ├── project │ ├── __init__.py │ ├── __pycache__ │ │ └── (中身省略) │ ├── asgi.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py └── manage.py ※プロジェクトのurls.pyからアプリのurls.pyへの連携は完了済みとする
なお、今回はDjango REST frameworkのみにスポットライトを当てるため、
以下の手順は省略します。(通常のDjango開発にかかる部分)
・Djangoプロジェクト作成(startproject)
・Djangoアプリ作成(startapp)
・初期設定(settings.py)
・モデル定義(models.py)
・管理サイトへの登録(admin.py)
etc…
ライブラリをインストールする
まずはDjango REST frameworkを使うためのライブラリをインストールします。
下記のコマンドを実行しましょう。
$ pip install djangorestframework
settings.pyを編集する
次にsettings.pyのINSTALLED_APPS内にrest_frameworkを追加します。
INSTALLED_APPS = [
...
'rest_framework',# 追加
]
Serializerを定義する
SerializerとはモデルをJSON形式に変換するためのものです。
Web APIではデータのやりとりをJSON形式で行うため、
Pythonで扱うデータをJSON形式に変換する必要があります。
ちなみに、JSON形式に変換することをシリアライズと呼び、
JSON形式から元のデータ形式に戻すことをデシリアライズと呼びます。
なお、今回使用するmodels.pyは以下の通りです。
from django.db import models
class Category(models.Model):
class Meta:
verbose_name = "カテゴリー"
verbose_name_plural = verbose_name
category_id = models.IntegerField(primary_key=True, unique=True)
title = models.CharField(max_length=50)
class Item(models.Model):
class Meta:
verbose_name = "アイテム"
verbose_name_plural = verbose_name
item_id = models.IntegerField(primary_key=True, unique=True)
title = models.CharField(max_length=50)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
そして、Serializerの定義ではserializers.pyというファイルを作成し、中身を以下の通りとします。
from rest_framework import serializers
from .models import Category, Item
class CategorySerializer(serializers.ModelSerializer):
class Meta:
model = Category
fields = ('category_id', 'title',)
class ItemSerializer(serializers.ModelSerializer):
class Meta:
model = Item
fields = ('item_id', 'title', 'category')
ここではserializers.ModelSerializerを継承してモデルに対応するSerializerを作成します。
”model”には利用するモデルテーブルを指定し、
”fields”には扱うフィールドを指定します。
ViewSetを定義する
ViewSetとはSerializerとModelを紐付けるためのものです。
views.pyにおいて以下の通り記述します。
from django.shortcuts import render
from rest_framework import viewsets
from .models import Category, Item
from .serializers import CategorySerializer, ItemSerializer
class CategoryViewSet(viewsets.ModelViewSet):
queryset = Category.objects.filter(category_id=1)
serializer_class = CategorySerializer
class ItemViewSet(viewsets.ModelViewSet):
queryset = Item.objects.all()
serializer_class = ItemSerializer
ここではviewsets.ModelViewSetを継承して先ほど作成したSerializerクラスとModelデータを紐付けます。
”queryset”には取得するModelデータを指定し、
”serializer_class”には対応するSerializerクラスを指定します。
URLを設定する
最後にアプリのurls.pyを編集していきます。
API用のURL設定では、Routerクラスを用いてパスとViewSetを紐付けます。
アプリのurls.pyにおける記述は以下の通りです。
from django.urls import path, include
from rest_framework import routers
from . import views
router = routers.DefaultRouter()
router.register('category', views.CategoryViewSet)
router.register('item', views.ItemViewSet)
urlpatterns = [
path('api/', include(router.urls)),
]
画面を確認する
ターミナルにてrunserverコマンドを実行して、
http://127.0.0.1:8000/api/にアクセスすると以下の画面が表示されます。
上の画面はJSON形式のレスポンスをブラウザ用に表示したものです。
また、この画面上でデータの操作(取得・作成・編集・削除など)を行うことができます。
実用的な使い方
Django REST frameworkの実用的な使い方としては、
外部からデータを取得することがメインかと思います。
外部からAPIにアクセスしてデータを取得する場合、
URLの末尾に「?format=json」を追加することでJSON形式でデータを取得することができます。
例えば以下の通り。
http://127.0.0.1:8000/api/item?format=json
# [{“item_id”:1,”title”:”コーラ”,”category”:1}]
まとめ
以上がDjango REST frameworkの使い方になります。
今回は通常のDjangoで定義したモデルを用いた基本的なDjango REST frameworkの使い方を解説しました。
本記事を基本としつつ、DRFの公式リファレンスを用いれば目的に沿った実装をすることができるでしょう。
ぜひ試してみてください!
Django REST framework公式リファレンス