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

この記事の続きです。

programming-gogogogo.hatenablog.com

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

www.youtube.com

今回はDRFのGeneric Viewsetについて勉強します。
公式ドキュメントの説明はこちらです。

www.django-rest-framework.org

ArticleViewSetクラスを以下のように修正します。

class ArticleViewSet(viewsets.GenericViewSet, mixins.ListModelMixin):
    serializer_class = ArticleSerializer
    queryset = Article.objects.all()

サーバーを再起動してlocalhost:8000/viewset/articleにアクセスすると正常にデータが取得できます。
また、ArticleViewSetクラスでCreateのMixinを指定していないのでAllowに記載されているメソッドはGET、OPTION、HEADになっています。

次にArticleViewSetクラスの引数にCreateModeMixinを加えます。

class ArticleViewSet(viewsets.GenericViewSet, mixins.ListModelMixin, mixins.CreateModelMixin):
    serializer_class = ArticleSerializer
    queryset = Article.objects.all()

サーバーを再起動して先ほどと同じviewset/articleにアクセスするとAllowメソッドの中にPOSTが追加されていて、POSTのメソッドが動くようになっていました。
GenericViewSetの場合は引数に渡されるMixinで実装が変わるようです。

また、localhost:8000/viewset/article/3のようにIDを指定してデータを取得しようとすると以下のようにエラーになりました。
f:id:JunpeiNakasone:20210327215038p:plain

あとはDELETE処理やUPDATE処理も実装できるようにArticleViewSetクラスを以下のように修正します。

class ArticleViewSet(viewsets.GenericViewSet, mixins.ListModelMixin, mixins.CreateModelMixin, mixins.UpdateModelMixin, mixins.RetrieveModelMixin, mixins.DestroyModelMixin):
    serializer_class = ArticleSerializer
    queryset = Article.objects.all()

するとID別にデータを取得できるようになり、画面にPUTとDELETEのボタンが追加され更新、削除処理が動くようになりました。
f:id:JunpeiNakasone:20210327215430p:plain