Djangoでwebアプリの作成(API編)

スポンサーリンク
Djangoでwebアプリの作成(API編)Django

この記事ではDjango公式チュートリアルに沿った内容で使い方を解説していきます。

今回はDjangoでAPIを作成する手順です。

 

環境構築

Djangoでは、DjangoRESTframeworkを使うと非常に簡単にAPIを作成する事ができます

DjangoRESTframeworkをインストールしていきましょう。

pip3 install djangorestframework

 

次にDjangoRESTframeworkを使用するライブラリとして宣言します。

設定は「mysite/settings.py」に記述します。

mysite/settings.py
INSTALLED_APPS = [
        :
    'rest_framework',
]

 

INSTALLED_APPSにrest_frameworkを追加します。

これでDjangoRESTframeworkを使用する準備は整いました。

 

djangoRESTframeworkの概要

DjangoRESTframeworkでREST APIを作成するには、以下の3つを設定する必要があります

REST API作成に必要な設定
  • ルーティングの設定(URL pattern)
  • データの処理設定(Serializer)
  • APIで処理する内容を定義(ViewSet)

 

それぞれどのように設定していくのか説明していきます。

 

ルーティングの設定(URL pattern)

まずルーティングをして、APIのURLとサーバプログラムを紐付けます

ルーティングは2種類のファイルで実施し、プロジェクト全体のルーティングとアプリケーションのルーティングに分かれています。

 

プロジェクト全体のルーティング

プロジェクト全体のルーティングはプロジェクトディレクトリにある「 mysite/urls.py」ファイルに設定します。

 

mysite/urls.py
from django.contrib import admin
from django.urls import path, include
from polls.urls import router as polls_api_router

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include(polls_api_router.urls)),
]

 

URLの後ろに/apiが続く場合、アプリケーションのurls.pyの設定を参照するように設定しています。

 

アプリのルーティング

アプリケーションのルーティング設定は、「polls/urls.py」ファイルに設定します。

 

polls/urls.py
from rest_framework import routers
from .views import QuestionViewSet

router = routers.DefaultRouter()
router.register(r'question', QuestionViewSet)

 

ここではrouterを使い、テーブルごとのにURLを設定しています。

api/questionでQuestionViewSet関数を呼び出すことを定義しています。

 

データの処理設定(Serializer)

APIで呼ばれた時にデータをJsonに変換するような処理について設定します。

設定は、「 polls/serializers.py」ファイルに記載します。

 

polls/serializers.py
# coding: utf-8
from rest_framework import serializers
from .models import Question

class QuestionSerializer(serializers.ModelSerializer):
    class Meta:
        model = Question
        # fields = ('name','id')
        fields = '__all__'
        # read_only_fields = ('id',)

 

QuestionSerializerクラスに扱いたいデータのカラムを指定します。

ここでは全てのカラムを扱うように’__all__’を設定しています。

 

APIで処理する内容を定義(ViewSet)

APIリクエストが来た際の処理を記述していきます。

設定ファイルは「polls/views.py」です。

 

polls/views.py
from rest_framework import viewsets, filters
from .models import Question
from .serializers import QuestionSerializer

class QuestionViewSet(viewsets.ModelViewSet):
    queryset = Question.objects.all()
    serializer_class = QuestionSerializer

 

APIで呼び出されるQuestionViewSetを定義しています。

querysetにはQuestionテーブルの全てのレコードを格納していて、

serializer_classにはJsonで出力するためのデータを格納しています。

 

APIを試してみる

全ての設定が完了したので、webアプリにアクセスしてみましょう。

まず、サーバを起動します。

python3 manage.py runserver 0:8000

 

ブラウザからサーバにアクセス(127.0.0.1:8000/api)すると、API一覧が表示されています。

DjangoのAPI画面にアクセス

 

APIのURLをクリックすると個別のモデルのリストが表示されます。

ここで、HTMLフォームからapiを使ってレコードを追加することもできます。

DjangoのAPI個別モデル画面

 

まとめ

DjangowebアプリのAPIを実装しました。

APIの作成にはDjangoRESTframeworkを使い簡単に作成することができました。

APIを実装するためには大きく3つの設定が必要です。

ルーティングの設定(URL pattern)・データの処理設定(Serializer)・APIで処理する内容を定義(ViewSet)についてそれぞれ解説しました。

 

参考文献

Home - Django REST framework
Django, API, REST, Home

コメント

  1. AO より:

    質問です。
    サーバーを起動すると
    ModuleNotFoundError: No module named ‘Question’というエラーになります。
    そこで、polls/models.py にQuestionクラスを定義しなければならないと思い、他の定義を参照しながら
    作ってみたのですがうまくいきません。
    どのようにすればよいでしょうか。
    Django 4.0.2
    DRF 3.13.1

  2. シャイニングシャイニング より:

    私の環境は
    Python 3.6.9
    Django 3.2.12
    となっております。
    Djangoについてあまり詳しくないため、バージョンを合わせて実施いただけると環境差異によるエラーは発生しないかと思います。

    ModuleNotFoundError: No module named ‘Question’ということですが、Questionテーブルの作成はお済みでしょうか?
    DBの作成についてはこちらの記事に記載しておりますので、ご参照ください。
    https://nisshingeppo.com/ai/django-backend/

タイトルとURLをコピーしました