前回、Django REST Frameworkを用いてREST APIを作成するという記事を公開しましたが、今回はSerializerクラスの作成を行ってみます。
Serializerクラスを作成することで、Djangoのモデル、データベースを他の形式に変換することができます。今回はJSON形式。
■Python
今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows10)(pythonランチャーでの確認)
■Serializerクラスの作成
Serializerクラスを作成してみますが、前回DjangoRESTFrameworkを用いてREST APIを作成しましたので、開発サーバーを実行し、アプリを実行します。実行後、作成したモデル、データベースにデータを追加します。
今回は「Name:田中」,「Hometown:大阪」,「Age:23」というデータを追加します。
INSTALLED_APPS の設定(rest_frameworkパッケージの確認)
追加後、INSTALLED_APPS の設定(rest_frameworkパッケージの確認)を行いますので、作成したプロジェクト(今回はtest_api1というプロジェクト)内にある「settings.py」をコードエディタで開きます。
■コード
INSTALLED_APPS = [ 'api1.apps.Api1Config', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', ]
開いた後に、INSTALLED_APPSの項目に「rest_framework」を追記していない場合は追記します。このパッケージの追記がないと、開発サーバーを実行し、アクセスした場合に「django.template.exceptions.TemplateDoesNotExist: rest_framework/api.html」というエラーが発生します。
s■serializers.pyの作成(シリアライザークラスの作成)
追記後、今度は作成したアプリケーション(今回はapi1というアプリケーション)内に「serializers.py」というスクリプトファイルを作成します。作成後、コードエディタを開きます。
■コード
from rest_framework import serializers from .models import test_api class testSerializer(serializers.ModelSerializer): class Meta: model = test_api fields = '__all__'
開いた後にコードを記述していきます。「from import」でrest_frameworkのserializersを呼び出します。さらに「.models」で作成したアプリケーション(今回はapi1というアプリケーション)内の「models.py」の中の作成したtest_apiクラスを呼び出します。
その後、testSerializerというクラスを作成し、今回の作成したモデル、データベースであるtest_apiをデータ型に変換するために、「model = test_api」と指定します。さらに「 fields = ‘__all__’」でモデル、データベースに存在するすべてのフィールドを返すようにします。
最後にコードを記述後、ファイルを保存します。
■Viewsの作成
保存後、続いて作成したアプリケーション(今回はapi1というアプリケーション)内にある「views.py」をコードエディタで開きます。
■コード
from django.shortcuts import render from django.http import HttpResponse from django.shortcuts import get_object_or_404 from rest_framework.views import APIView from rest_framework.response import Response from rest_framework import status from.models import test_api from.serializers import testSerializer class test_list(APIView): def get(self,request): test_api01 = test_api.objects.all() serializer = testSerializer(test_api01,many=True) return Response(serializer.data) def post(self): pass
開いた後にコードを記述していきます。「from django.http import HttpResponse」は、応答を返すためのものです。
「from django.shortcuts import get_object_or_404」は要求されたオブジェクトが存在しない場合に応答するためのものです。
「from rest_framework.views import APIView」は、通常のビューがAPIデータを返すことができるようになります。
「from rest_framework.response import Response」は、状態や特定の応答を得ることができます。
「from rest_framework import status」は基本的にステータスを送り返す。
「from.models import test_api」は「.models」で作成したアプリケーション(今回はapi1というアプリケーション)内の「models.py」の中の作成したtest_apiクラスを呼び出す。
「from.serializers import testSerializer」は、作成したアプリケーション(今回はapi1というアプリケーション)内の「serializers.py」の中のtestSerializerクラスを呼び出す。
test_listというクラスを作成し、その中でdef文を用いてget()関数を定義し、今回の作成したモデル、データベースであるtest_api内のデータを返すようにします。次にpost()関数を定義し、モデル、データベースであるtest_api内にデータを投稿するようにしますが、今回はこれは実行することはないのでpass文を用います。
最後にコードを記述後、ファイルを保存します。
■JSON形式を表示するURLを追加しURLを更新
保存後、続いて作成したプロジェクト(今回はtest_api1というプロジェクト)内にある「urls.py」をコードエディタで開きます。
■コード
from django.contrib import admin from django.urls import path from api1 import views urlpatterns = [ path('admin/', admin.site.urls), path('testapi/',views.test_list.as_view()), ]
開いた後にコードを記述していきます。「from import」で、作成したアプリケーション(今回はapi1というアプリケーション)を指定し、さらにその中のviews(views.py)を呼び出します。
その後、「urlpatterns = [ ]」内に変換されたJSON形式のデータを表示させる「testapi/」というURLを追加し、viewsを表示させます。
最後にコードを記述後、ファイルを保存します。
■実行と検証
(.venv) C:\Users\user_\django_api\test_api1>python manage.py runserver
保存後、実行と検証のため、Windows10のコマンドプロンプトを起動し、仮想環境に入り、上記のコマンドを入力し、Enterキーを押します。開発サーバーを実行させます。
Watching for file changes with StatReloader Performing system checks... System check identified no issues (0 silenced). July 26, 2022 - 12:47:34 Django version 4.0.6, using settings 'test_api1.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CTRL-BREAK.
Enterキーを押すと、開発サーバーが実行となりますので、Webブラウザを起動し、アドレスバーに「http://127.0.0.1:8000/testapi/」と入力し、アクセスします。
アクセスすると、今回作成したモデル、データベース内に追加したデータをJSON形式に変換し表示させることができました。
コメント