Django REST frameworkでREST APIを5分で構築
0.動作環境
Apple M1
macOS Monterey(ver12.2)
Python 3.9.7
Django 4.0.3
DjangoRESTframework 3.13.1
1.プロジェクトとアプリケーションの作成
requirements.txt
をプロジェクト直下に作成し、DjangoとDjango REST framworkを定義します。
Django
djangorestframework
Python仮想環境を構築・有効化して、requirements.txt
に定義したパッケージを一括インストールします。
Djangoプロジェクトを作成し、REST APIの本体となるアプリケーションapiv1
を作成します。
$ python -m venv venv
$ . venv/bin/activate
(venv)$ pip install -r requirements.txt
(venv)$ django-admin startproject config .
(venv)$ python manage.py startapp apiv1
2.プロジェクト設定ファイルの修正
config/settings.py
に、Django REST frameworkとアプリケーションapiviを登録します。LANGUAGE_CODEとTIME_ZONEも国内仕様に変えておきましょう。
INSTALLED_APPS = [
...略...
'rest_framework',
'apiv1.apps.Apiv1Config',
]
LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'
3.アプリケーションファイルの作成・修正
プロジェクト用ルーティングファイルconfig/urls.py
に、アプリケーション側のルーティングapiv1/urls
を登録します。
...略...
from django.urls import path,include
# include追記
urlpatterns = [
...略...
path('api/v1/',include('apiv1.urls'))
]
モデルを通してデータベースをPythonオブジェクトとして扱います。
モデルファイルapiv1/models.py
にデータベースのテーブルとカラムを定義をします。今回は、ごく単純にtestname(文字列)とtestvalue(整数値)の2つのカラムを用意しました。
...略...
class TestData(models.Model):
testname = models.CharField(max_length=100)
testvalue = models.IntegerField()
入力データはシリアライザでモデルオブジェクトに変換され、出力データはシリアライザを通じてJSON文字列に変換されます。
シリアライザーapiv1/serializers.py
を作成して、以下の通り記述します。
from rest_framework import serializers
from .models import TestData
class TestDataSerializer(serializers.ModelSerializer):
class Meta:
model = TestData
fields = '__all__'
ビューではJSON形式のデータが入ったリクエストオブジェクトを受け取り、JSON形式のレスポンスオブジェクトを作成します。
ビューapiv1/views.py
に以下の通り記述します。
...略...
from rest_framework import viewsets
from .models import TestData
from .serializers import TestDataSerializer
class TestDataViewSet(viewsets.ModelViewSet):
queryset = TestData.objects.all()
serializer_class = TestDataSerializer
apiv1/urls.py
を作成して、ビューとURLを紐付けます。
from django.urls import path, include
from rest_framework import routers
from . import views
router = routers.DefaultRouter()
router.register('testdata',views.TestDataViewSet)
urlpatterns = [
path('', include(router.urls))
]
4.データベースのマイグレーション
makemigrations
コマンドでマイグレーションファイルを作成します。
migrate
コマンドで、デフォルトのデータベースSQLite3にマイグレーションファイルに基づくテーブルを作成します。
(venv)$ python manage.py makemigrations
(venv)$ python manage.py migrate
5.簡易サーバーの起動
簡易サーバーを起動し、http://127.0.0.1:8000/api/v1/
を開くとREST APIが出力されます。
(venv)$ python manage.py runserver
Discussion