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

この記事の続きです。

programming-gogogogo.hatenablog.com

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

www.youtube.com

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

www.django-rest-framework.org

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のフォームもあり、正常に登録処理を行うことができました。

f:id:JunpeiNakasone:20210328152402p:plain f:id:JunpeiNakasone:20210328152417p:plain f:id:JunpeiNakasone:20210328152431p:plain

また、localhost:8000/viewset/article/3/などIDを指定して1件データを取得する処理も正常に動作し、DELETE、PUTのボタンを押して削除処理、更新処理も正常に動作しました。

f:id:JunpeiNakasone:20210328152738p:plain f:id:JunpeiNakasone:20210328152751p:plain f:id:JunpeiNakasone:20210328152806p:plain f:id:JunpeiNakasone:20210328152821p:plain f:id:JunpeiNakasone:20210328152833p:plain

ModelViewsetを使うと少ない工数CRUD処理が実装できて便利そうです。

しかし場合によっては削除処理は使わないのに実装しているとバグの温床になる場面がありそうだと思っていろいろ調べてみました。

こちらの記事がわかりやすかったです。
qiita.com

ModelViewsetは以下のように実装されているので

class ModelViewSet(mixins.CreateModelMixin,
                   mixins.RetrieveModelMixin,
                   mixins.UpdateModelMixin,
                   mixins.DestroyModelMixin,
                   mixins.ListModelMixin,
                   GenericViewSet):

実装したくないメソッドがある場合は必要なMixinだけを持たせたクラスを自分で定義すれば解決とのこと。
確かにその方が安全そうだと思いました。

DRFのModelViewsetが実装されているコード
github.com

ある程度DRFの雰囲気が掴めてきました。
自分で動くものを作りながらさらに知見を深めていきたいと思います。