DRF - 五个扩展类 - 辅助理解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/apollo_miracle/article/details/83897745
from rest_framework.response import Response
from rest_framework.views import APIView

from booktest.models import BookInfo
from booktest.serializers import BookInfoSerializer


class BookInfoAPIView(APIView):
    queryset = BookInfo.objects.all()
    serializer_class = BookInfoSerializer

    # 来自于GenericAPIView
    def get_queryset(self):
        return self.queryset

    def get_serializer_class(self):
        return self.serializer_class

    def get_objects(self, pk):
        return self.get_queryset.get(pk=pk)

    # 来自于五个Mixin
    # 查所有
    def get(self, request):
        # books = BookInfo.objects.all()
        # serializer = BookInfoSerializer(books, many=True)
        books = self.get_queryset()
        serializer = self.get_serializer_class(books, many=True)
        return Response(serializer.data)

    # 查一个
    def get(self, request, pk):
        # book = BookInfo.objects.get(pk=pk)
        # book = BookInfo.objects.all().get(pk=pk)
        # serializer = BookInfoSerializer(book)
        book = self.get_objects(pk=pk)
        serializer = self.get_serializer_class(book)
        return Response(serializer.data)

    # 增加
    def post(self, request):
        # serializer = BookInfoSerializer(data=request.data)
        serializer = self.get_serializer_class(data=request.data)
        if not serializer.is_valid():
            return Response({"error": "错误"})
        serializer.save()
        return Response(serializer.data)

    # 修改
    def put(self, request, pk):
        # book = BookInfo.objects.get(pk=pk)
        # book = BookInfo.objects.all().get(pk=pk)
        # serializer = BookInfoSerializer(book)
        book = self.get_objects(pk=pk)
        serializer = self.get_serializer_class(book, data=request.data)
        if not serializer.is_valid():
            return Response({"error": "错误"})
        serializer.save()
        return Response(serializer.data)

    # 删除
    def delete(self, request, pk):
        # book = BookInfo.objects.get(pk=pk)
        # book = BookInfo.objects.all().get(pk=pk)
        book = self.get_objects(pk=pk)
        book.delete()
        return Response("ok")

猜你喜欢

转载自blog.csdn.net/apollo_miracle/article/details/83897745
DRF