この記事の続きです。 programming-gogogogo.hatenablog.com
こちらの動画を見ながらPythonのDjango REST framework(DRF)について勉強しています。
Serializerクラスを使ってViewを実装していきます。
まずはDRF特有のViewの書き方ではなく通常のDjangoの書き方で実装します。
api_basic/views.pyを以下のようにして、Article一覧を取得するarticle_listを定義します。
from django.shortcuts import render from django.http import HttpResponse, JsonResponse from rest_framework.parsers import JSONParser from .models import Article from .serializers import ArticleSerializer def article_list(request): if request.method == 'GET': articles = Article.objects.all() serializer = ArticleSerializer(articles, many=True) returnn JsonResponse(serializer.data, safe = False) elif request.method == 'POST': data = JSONParser().parse(request) serializer = ArticleSerializer(data=data) if serializer.is_valid(): serializer.save() return JsonResponse(serializer.data, status=201) return JsonResponse(serializer.errors)
article_list関数についてのメモ:
リクエストメソッドによって処理を変えるため引数にrequestを指定
GETメソッドの場合はArticleからデータを全取得し、ArticleSrializerでJSONに変換して、JSONResponseの引数に入れてreturnする
POSTメソッドの場合はデータを新規作成する
requestをJSONparser.parse関数でパースして、ArticleSerializeに渡す
ArticleSerializerにデータが入った後は一旦データが有効であるかどうかをis_valid()でチェックし、有効であればsave()でCREATE処理を実行し、有効でない場合はJSONResponseにserializer.errorsを渡してreturnする
次にurlを追加するためにMyProject/urls.pyにincludeをimportして以下のようにします。
from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('', include('api_basic.urls')) ]
次にapi_basic配下にurls.pyを新規ファイルとして作成し、以下のようにします。
from django.urls import path from .views import article_list urlpatterns = [ path('article/', article_list), ]
上記の実装が完了すると、python manage.py runserver 0:8000でサーバーを起動してブラウザからlocalhost:8000/articleにアクセスしてArticleのデータを取得することができます。
GETの処理が問題なく動くことが確認できたので次の記事でPOSTの処理を動作確認していきます。