Django REST Framework(DRF)でMixinとgenericsを使う
Mixinを使うことで今まで書いていた内容を省略できる。
serializers.py
from rest_framework import serializers
from ebooks.models import Ebook, Review
class ReviewSerializer(serializers.ModelSerializer):
class Meta:
model = Review
fields = "__all__"
class EbookSerializer(serializers.ModelSerializer):
reviews = ReviewSerializer(many=True, read_only=True)
class Meta:
model = Ebook
fields = '__all__'
views.py
from rest_framework import generics
from rest_framework import mixins
from ebooks.models import Ebook
from .serializers import EbookSerializer
class EbookListCreateAPIView(mixins.ListModelMixin, mixins.CreateModelMixin, generics.GenericAPIView):
queryset = Ebook.objects.all()
serializer_class = EbookSerializer
#querysetとserializer_classを定義
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs) #list
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs) #create
class EbookDetailAPIView(mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
generics.GenericAPIView):
queryset = Ebook.objects.all()
serializer_class = EbookSerializer
def get(self, request, *args, **kwargs):
return self.retrieve(request, *args, **kwargs) #retrieve
def put(self, request, *args, **kwargs):
return self.update(request, *args, **kwargs) #update
def delete(self, request, *args, **kwargs):
return self.destroy(request, *args, **kwargs) #destroy
これをコピーしては貼るだけでrest apiが完成する。
urls.py
from django.urls import path
from .views import EbookListCreateAPIView, EbookDetailAPIView
urlpatterns = [
path('ebooks/', EbookListCreateAPIView.as_view(), name="ebook-list"),
path('ebooks/<int:pk>/', EbookDetailAPIView.as_view(), name="ebook-detail"),
]
これだけでとても簡単に実装できるんだなと思っていたがgenericsはこれを更に簡略している。
views.py
from rest_framework import generics
from rest_framework import mixins
from ebooks.models import Ebook
from .serializers import EbookSerializer
class EbookListCreateAPIView(generics.ListCreateAPIView): #list create
queryset = Ebook.objects.all()
serializer_class = EbookSerializer
class EbookDetailAPIView(generics.RetrieveUpdateDestroyAPIView): #retrieve update destroy
queryset = Ebook.objects.all()
serializer_class = EbookSerializer
とても簡単だが、これを最初に勉強すると何が何だかさっぱりわからない。
一からしっかりと覚えたほうがいいかもしれない。
Author And Source
この問題について(Django REST Framework(DRF)でMixinとgenericsを使う), 我々は、より多くの情報をここで見つけました https://qiita.com/popo62520908/items/a7d702d673b212c0cfa4著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .