djangorestframework

【Python】Django REST Frameworkを使ったWEB API開発

BACK END

Hello World.

LiSMOtechの久津間です。

 

前回の記事:良く使うDjangoのモデルフィールドを解説

 

これまでDjangoに関する記事をいくつかご紹介してきましたが、フロントとバックを切り離した開発を行いたいケースが出てくると思います。

Djangoにはそういった環境、WEB APIを利用した開発をするためにDjango REST Framework(通称DRF)というフレームワークがあります。

DjangoでWEB APIを開発したいって方は、是非こちらの記事を最後まで読んでDjango REST Frameworkの理解を少しでも深めていただければと思います。

 

それでは早速、Django REST Frameworkについて紹介していきます。

公式ドキュメンはこちらから

 

 

Django REST Frameworkとは

Django REST Frameworkは、WEB APIを構築するためのフレームワークです。

Djangoを使ってREST full APIの開発を行うことができます。

ここでは詳しくはご紹介しませんが、以下のようなRESTの4原則沿ったシンプルな設計思想の基、APIを効果的に活用、開発することができます。

  • アドレス可能性(1つのURIを用いて全ての機能を表現できるようにする)
  • ステートレス性(すべてのリクエストが完全に分離しており、状態管理は行われない)
  • 接続性(別の情報に接続することが可能に)
  • 統一インターフェース(HTTMPメソッドを利用)

 

Django REST Frameworkの仕組み

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/」にアクセスします。

環境がうまく設定できていれば以下のような画面が表示されるます。

Django

 

管理画面「http://127.0.0.1:8000/admin」にログインして、作成したアプリが追加されているか確認します。

今回の例ではBooksが追加されていれば問題ありません。

Djanog 管理画面

 

また、任意のデータを追加しておきましょう。

Django データ追加

 

Django REST FrameworkによるAPI実装

前準備が完了したところで、Django REST FrameworkでのWEB API実装を進めていきます。

Django REST Frameworkの主要なコンポーネントは以下のとおりです。

  • Serializer
  • ViewSets
  • Router

これらのコンポーネントの役割や使い方は各所でご紹介をしていきます。

 

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クラスを作成します。

Serializerクラスはデータベースから取り出したオブジェクトの形式変換、ユーザーから送られたJSONの形式変換を行います。

先ずは、アプリフォルダ配下にserializers.pyを作成します。

Django 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"] 

 

ViewSetsによるビューの作成

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

 

 

RouterによるURLの追加

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)),
]

 

作成したAPIを確認する

ここまで出来たら、以下のコマンドを実行しサーバーを起動させます。

python manage.py runserver

 

今回の例では、以下のURLにアクセスすることで、GETメソッドによるレスポンスをブラウザから確認することが可能です。

http://127.0.0.1:8000/api/book/

API確認

無事に登録されている情報が表示されていれば成功です!

 

まとめ

今回の記事ではDjango REST FrameworkによるWEB APIの作成を行いました。

データ取得のGETメソッドのみ利用しましたが、その他にも更新やアップデート、削除なども行うことができます。

公式ドキュメントなどを読みながらご自身でも色々と試してみてください!

最後までご覧いただきありがとうございました。


ともに考え、寄り添う。プロのデザインチームが即参戦。

販促ツールや一貫したデザインによるブランド構築などビジネスの成長をデザインの力で促進します。

NEXTGATE LiSMOtechでは中小企業を中心にブランディング・WEBマーケティングを活用したWEB戦略を提供しています。

企業課題・問題に関するご相談、WEBサイト制作やグラフィックデザイン制作のクリエイティブに関するご相談やご質問、お見積りなどお気軽にお問い合わせください。

お得な情報がLINEに届く!!

LINE公式アカウントはこちらから。

友だち追加

最新記事

CONTACT

NEXTGATE LiSMOtechでは中小企業を中心にブランディング・WEBマーケティングを活用したWEB戦略を提供しています。
企業課題・問題に関するご相談、WEBサイト制作やグラフィックデザイン制作のクリエイティブに関するご相談やご質問、お見積りなどお気軽にお問い合わせください。

平日10:00〜19:00

お電話の場合こちらから

043-305-4162

平日10:00〜19:00