前回の記事の続きです。
programming-gogogogo.hatenablog.com
前回でviewに関数を定義してレスポンスを返すことはできたので、次はSerializerを定義してDBの値をJSONで返したいと思います。
そういえばまだLinterを入れてなかったのでFlake8をインストールしました。
また、drfproject/drfproject/settings.pyのINSTALLED_APPSにrest_frameworkを追加します。
INSTALLED_APPS = [ "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", "django.contrib.sessions", "django.contrib.messages", "django.contrib.staticfiles", "blog", "rest_framework", # 追加 ]
drfprpject/blog/serializers.pyを作成し、以下の内容にします。
from rest_framework import serializers from .models import User class UserSerializer(serializers.ModelSerializer): class Meta: model = User fields = '__all__'
これでUserテーブルのデータをJSONで返すSerializerができていると思います。
Serializerの書き方は公式ドキュメントの以下のページを参考にしました。
https://www.django-rest-framework.org/api-guide/serializers/#specifying-which-fields-to-include
対話型シェルで以下のように動作確認することができました。
>>> from blog.serializers import UserSerializer >>> serializer = UserSerializer() >>> print(serializer) UserSerializer(): id = IntegerField(label='ID', read_only=True) name = CharField(max_length=100) age = IntegerField()
次に関数を書き直してみます。
drfproject/blog/views.py
from rest_framework import viewsets from .serializers import UserSerializer from .models import User from django.http import JsonResponse def users_list(request): users = User.objects.all() serializer = UserSerializer(users, many=True) return JsonResponse(serializer.data, safe=False)
blogディレクトリにurls.pyを作成し、ルーティングを定義します。
touch drfproject/blog/urls.py
from django.urls import path from blog import views urlpatterns = [ path('blog/', views.users_list) ]
メインのdrfproject/drfproject/urls.pyを編集します。
from django.contrib import admin from django.urls import path, include urlpatterns = [ path("admin/", admin.site.urls), path('', include('blog.urls')) ]
再度ローカルサーバーを起動し、APIレスポンスを確認します。
python manage.py runserver curl http://localhost:8000/blog/ [{"id": 1, "name": "testuser", "age": 10}]