この記事の続きです。
programming-gogogogo.hatenablog.com
こちらの動画を見ながらPythonのDjango REST framework(DRF)について勉強しています。
今回はDRFのModelViewsetについて勉強します。
公式ドキュメントの説明はこちらです。
The ModelViewSet class inherits from GenericAPIView and includes implementations for various actions, by mixing in the behavior of the various mixin classes.
The actions provided by the ModelViewSet class are .list(), .retrieve(), .create(), .update(), .partial_update(), and .destroy().
ModelVIewSetクラスはGenericAPIViewを継承して様々なアクションを含んでいるので、list()、retrieve()、create()、update()、partial_update()、destory()などを使うことができるみたいです。
api_basic/views.pyをModelViewsetを使うため以下のように変更します。
class ArticleViewSet(viewsets.ModelViewSet): serializer_class = ArticleSerializer queryset = Article.objects.all()
サーバーを再起動してlocalhost:8000/viewset/articleにアクセスしてみると正常にデータが取れ、かつPOSTのフォームもあり、正常に登録処理を行うことができました。
また、localhost:8000/viewset/article/3/などIDを指定して1件データを取得する処理も正常に動作し、DELETE、PUTのボタンを押して削除処理、更新処理も正常に動作しました。
ModelViewsetを使うと少ない工数でCRUD処理が実装できて便利そうです。
しかし場合によっては削除処理は使わないのに実装しているとバグの温床になる場面がありそうだと思っていろいろ調べてみました。
こちらの記事がわかりやすかったです。
qiita.com
ModelViewsetは以下のように実装されているので
class ModelViewSet(mixins.CreateModelMixin, mixins.RetrieveModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin, mixins.ListModelMixin, GenericViewSet):
実装したくないメソッドがある場合は必要なMixinだけを持たせたクラスを自分で定義すれば解決とのこと。
確かにその方が安全そうだと思いました。
DRFのModelViewsetが実装されているコード
github.com
ある程度DRFの雰囲気が掴めてきました。
自分で動くものを作りながらさらに知見を深めていきたいと思います。