この記事の続きです。
programming-gogogogo.hatenablog.com
こちらの動画を見ながらPythonのDjango REST framework(DRF)について勉強しています。
今回はDRFのGeneric Viewsetについて勉強します。
公式ドキュメントの説明はこちらです。
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を指定してデータを取得しようとすると以下のようにエラーになりました。
あとは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のボタンが追加され更新、削除処理が動くようになりました。