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

この記事の続きです。

programming-gogogogo.hatenablog.com

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

www.youtube.com

今回はGeneric viewの部分を実装します。

公式ドキュメントの説明はこちらです。

www.django-rest-framework.org

The generic views provided by REST framework allow you to quickly build API views that map closely to your database models.
DRFで提供されているgeneric viewを使うと、データベースのモデルに近い形でAPI viewsをすぐに構築できるようです。

api_basic/views.pyに以下のようにGenericAPIViewクラスを追加します。

from rest_framework import generics
from rest_framework import mixins

class GenericAPIView(generics.GenericAPIView, mixins.ListModelMixin):
    serializer_class = ArticleSerializer
    queryset = Article.objects.all()

    def get(self, request):
        return self.list(request)

api_basic/urls.pyにもGenericAPIViewのエンドポイントを追加します。

urlpatterns = [
    path('article/', ArticleAPIView.as_view()),
    path('detail/<int:id>/', ArticleDetails.as_view()),
    path('generic/article/', GenericAPIView.as_view(),)
]

localhost:8000/generic/article/にアクセスするとarticle一覧が表示されます。
f:id:JunpeiNakasone:20210322063840p:plain

ただこの状態だとPOSTメソッドが定義されておらず、管理画面下部にもPOST投稿フォームがありません。
f:id:JunpeiNakasone:20210322064241p:plain

POST処理を追加するためにviews.pyを以下のように修正します。

from rest_framework import generics
from rest_framework import mixins

class GenericAPIView(generics.GenericAPIView, mixins.ListModelMixin, mixins.CreateModelMixin):
    serializer_class = ArticleSerializer
    queryset = Article.objects.all()

    def get(self, request):
        return self.list(request)

    def post(self, request):
        return self.create(requestZ)

サーバーを再起動するとPOST用のフォームが追加されており、POST処理が正常に動くことが確認できました。
f:id:JunpeiNakasone:20210322220350p:plain