【学習記録】Django REST frameworkチュートリアル5 Views GET

この記事の続きです。 programming-gogogogo.hatenablog.com

こちらの動画を見ながらPythonDjango REST framework(DRF)について勉強しています。

www.youtube.com

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のデータを取得することができます。
f:id:JunpeiNakasone:20210316065204p:plain

GETの処理が問題なく動くことが確認できたので次の記事でPOSTの処理を動作確認していきます。