この記事の続きです。
programming-gogogogo.hatenablog.com
こちらの動画を見ながらPythonのDjango REST framework(DRF)について勉強しています。
今回はGeneric viewの部分を実装します。
公式ドキュメントの説明はこちらです。
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一覧が表示されます。
ただこの状態だとPOSTメソッドが定義されておらず、管理画面下部にもPOST投稿フォームがありません。
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処理が正常に動くことが確認できました。