前回viewを関数ベースで作成しましたが、今回はそれをクラスベースに変えてみようと思います。
view
from .models import Blog
from .serializers import BlogSerializer
from rest_framework import generics
class BlogList(generics.ListCreateAPIView):
queryset = Blog.objects.all()
serializer_class = BlogSerializer
class BlogDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Blog.objects.all()
serializer_class = BlogSerializer
django REST framework 最強説がここに浮上します。ListCreateAPIViewとRetrieveUpdateDestroyAPIViewを継承したら三行でAPIの完成です。チュートリアルにはシンプルなAPIviewを継承してリクエストのメソッドごとに実装していくとか様々なmixinを使って実装するとか細かいことが書いてあるので気になる方はそちらを参照してください。個人的にはListCreateAPIViewとRetrieveUpdateDestroyAPIViewの2つを継承するやり方さえ知っておけばとりあえず問題ない気がする。
url
urls.pyをクラスベースに対応させます。
from django.urls import path
from rest_framework.urlpatterns import format_suffix_patterns
from .views import BlogList, BlogDetail
urlpatterns = [
path('blog/', BlogList.as_view()),
path('blog/<int:pk>/', BlogDetail.as_view()),
]
urlpatterns = format_suffix_patterns(urlpatterns)
動作確認
runserverしてブラウザで確認してみます。http://localhost:8000/blog/にアクセスすると以下のような画面が表示されます。クラスベースでも実装できました。

さらにスクロールしていくとフォームがありここからpostリクエストを送信してデータの追加が行えるようになっています。

またhttp://localhost:8000/blog/1/にGETを送るとid1のデータがレスポンスされ、削除、更新ができます。
参考
3 - Class based views - Django REST framework
Django, API, REST, 3 - Class based views
コメント