Hello World.
LiSMOtechの久津間です。
これまでDjangoに関する記事をいくつかご紹介してきましたが、フロントとバックを切り離した開発を行いたいケースが出てくると思います。
Djangoにはそういった環境、WEB APIを利用した開発をするためにDjango REST Framework(通称DRF)というフレームワークがあります。
DjangoでWEB APIを開発したいって方は、是非こちらの記事を最後まで読んでDjango REST Frameworkの理解を少しでも深めていただければと思います。
それでは早速、Django REST Frameworkについて紹介していきます。
Django REST Frameworkは、WEB APIを構築するためのフレームワークです。
Djangoを使ってREST full APIの開発を行うことができます。
ここでは詳しくはご紹介しませんが、以下のようなRESTの4原則沿ったシンプルな設計思想の基、APIを効果的に活用、開発することができます。
DjangoでのWEBアプリケーション開発とDjnago REST Frameworkを利用したWEB API開発ではアーキテクチャが異なり、Django REST Frameworkを利用したWEB API開発の場合では、データ形式変換という処理を行うことに特徴があります。
データベースから取り出したモデルのオブジェクトをJSONにシリアライズ(serialize)したり、ユーザーから送られたJSONの文字列をデシアライズしてモデルに形式変換を行います。
Django REST Frameworkではこの処理をSerializerというクラスで行います。
Serializerクラスは、JSONへの形式変換だけでなくデータのバリデーションも行うことが可能です。
Django REST Frameworkを利用していく前に、アプリケーションの準備を進めていきます。
PC:Mac
OS:macOS Monterey
python:3.9.5
Django:4.1.3
Django REST Framework :3.14.0
Djangoのインストールが完了している状態を前程に進めます。
任意のフォルダで以下のコマンドを実行し、プロジェクトを作成します。
django-admin startproject config .
以下のコマンドでアプリケーションを作成します。
python manage.py startapp api
モデルクラスを定義、作成していきます。
ここでは本の情報を持ったモデルを作成します。(なんでも大丈夫です!)
api/models.py
from django.db import models
import uuid
# Create your models here.
class Book(models.Model):
uid = models.UUIDField('テストID',default=uuid.uuid4, editable=False)
title = models.CharField('タイトル', max_length=100)
category = models.CharField('カテゴリー', max_length=10)
author = models.CharField('著者', max_length=20)
created_at = models.DateTimeField('作成日時', auto_now_add=True)
update_at = models.DateTimeField('更新日', auto_now=True)
設定ファイルにアプリケーションを追加します。
config/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'api.apps.ApiConfig' # 追加
]
管理画面にアプリを表示されるように登録します。
api/admin.py
from django.contrib import admin
from api.models import Book # 追加
# Register your models here.
admin.site.register(Book) # 追加
データベースに反映するため、以下のコマンドを実行します。
python manage.py makemigrations
python manage.py migrate
管理アカウントを作成するため、以下のコマンドを実行します。
※メールアドレス、パスワードを任意で入力
python manage.py createsuperuser
ここまで出来たら、以下のコマンドを実行してサーバーを起動します。
python manage.py runserver
ターミナルにも表示される「http://127.0.0.1:8000/」にアクセスします。
環境がうまく設定できていれば以下のような画面が表示されるます。
管理画面「http://127.0.0.1:8000/admin」にログインして、作成したアプリが追加されているか確認します。
今回の例ではBooksが追加されていれば問題ありません。
また、任意のデータを追加しておきましょう。
前準備が完了したところで、Django REST FrameworkでのWEB API実装を進めていきます。
Django REST Frameworkの主要なコンポーネントは以下のとおりです。
これらのコンポーネントの役割や使い方は各所でご紹介をしていきます。
以下のコマンドを実行し、Django REST Frameworkをインストールします。
pip install djangorestframework
インストールの完了後、設定ファイルにDjango REST Frameworkを追加します。
config/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'api.apps.ApiConfig',
'rest_frameowrk', # 追加
]
Serializerクラスを作成します。
Serializerクラスはデータベースから取り出したオブジェクトの形式変換、ユーザーから送られたJSONの形式変換を行います。
先ずは、アプリフォルダ配下にserializers.pyを作成します。
作成したserializers.pyを以下のとおり編集します。
api/serializers.py
from rest_framework import serializers
from .models import Book
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = ["id", "uid", "title", "category", "author", "created_at", "update_at"]
Django REST Frameworkが提供するクラスベースビューを使ってビューを作成します。
他にも多くのクラスベースビューがありますが、ここではViewSetsというコンポーネントを利用します。
以下の例のとおり、rest_framework.viewsets.ModelViewSetクラスを継承してクラスを作成します。
api/views.py
from django.shortcuts import render
from rest_framework import viewsets
from .models import Book
from .serializer import BookSerializer
# Create your views here.
class BookViewSet(viewsets.ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializer
Django REST FrameworkでAPIのルーティングをするために、Routerクラスを使っていきます。
Routerクラスを使うことでURLディスパッチャーの設定が簡易的に記述が可能となります。
以下の例はroutersをインスタンス化し、BookViewSetのルーティングを設定しています。
config/urls.py
from django.contrib import admin
from django.urls import path, include
from rest_framework import routers
from api.views import BookViewSet
router = routers.DefaultRouter()
router.register('book', BookViewSet)
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include(router.urls)),
]
ここまで出来たら、以下のコマンドを実行しサーバーを起動させます。
python manage.py runserver
今回の例では、以下のURLにアクセスすることで、GETメソッドによるレスポンスをブラウザから確認することが可能です。
http://127.0.0.1:8000/api/book/
無事に登録されている情報が表示されていれば成功です!
今回の記事ではDjango REST FrameworkによるWEB APIの作成を行いました。
データ取得のGETメソッドのみ利用しましたが、その他にも更新やアップデート、削除なども行うことができます。
公式ドキュメントなどを読みながらご自身でも色々と試してみてください!
最後までご覧いただきありがとうございました。
NEXTGATE LiSMOtechでは中小企業を中心にブランディング・WEBマーケティングを活用したWEB戦略を提供しています。
企業課題・問題に関するご相談、WEBサイト制作やグラフィックデザイン制作のクリエイティブに関するご相談やご質問、お見積りなどお気軽にお問い合わせください。
平日10:00〜19:00
© NEXTGATE LiSMOtech All rights reserved