• DRF对视图的封装


    from rest_framework.viewsets import ViewSetMixin
    
    
    # class ModelViewSet(ViewSetMixin, GenericAPIView, ListModelMixin, CreateModelMixin, RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin):
    #     pass
    
    from rest_framework.viewsets import ModelViewSet
    
    
    class BookModelViewSet(ModelViewSet):
        queryset = Book.objects.all()
        serializer_class = BookSerializer

    url:

    from django.urls import path, include
    from .views import BookView, BookEditView, BookModelViewSet
    from rest_framework.routers import DefaultRouter
    
    
    router = DefaultRouter()
    
    router.register(r"", BookModelViewSet)
    
    
    urlpatterns = [
        # path('list', BookView.as_view()),
        # path('retrieve/<int:id>', BookEditView.as_view()),
        # path('list', BookModelViewSet.as_view({"get": "list", "post": "create"})),
        # path('retrieve/<int:pk>', BookModelViewSet.as_view({"get": "retrieve", "put": "update", "delete": "destroy"})),
    ]
    
    
    urlpatterns += router.urls

    ——————————————————————————————————————————————————————————————————————————————

    class CreateModelMixin(object):
        def create(self, request):
            serializer = self.get_serializer(data=request.data)
            if serializer.is_valid():
                serializer.save()
                return Response(serializer.data)
            else:
                return Response(serializer.errors)
    
    
    class RetrieveModelMixin(object):
        def retrieve(self, request, id):
            book_obj = self.get_queryset().filter(id=id).first()
            ret = self.get_serializer(book_obj)
            return Response(ret.data)
    
    
    class UpdateModelMixin(object):
        def update(self, request, id):
            book_obj = self.get_queryset().filter(id=id).first()
            serializer = self.get_serializer(book_obj, data=request.data, partial=True)
            if serializer.is_valid():
                serializer.save()
                return Response(serializer.data)
            else:
                return Response(serializer.errors)
    
    
    class DestroyModelMixin(object):
        def destroy(self, request, id):
            book_obj = self.get_queryset().filter(id=id).first()
            book_obj.delete()
            return Response("")
    
    
    class ListCreateAPIView(GenericAPIView, ListModelMixin, CreateModelMixin):
        pass
    
    
    class RetrieveUpdateDestroyAPIView(GenericAPIView, RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin):
        pass
    
    
    # class BookView(GenericAPIView, ListModelMixin, CreateModelMixin):
    class BookView(ListCreateAPIView):
        query_set = Book.objects.all()
        serializer_class = BookSerializer
    
        def get(self, request):
            # book_obj = Book.objects.first()
            # ret = BookSerializer(book_obj)
            # book_list = Book.objects.all()
            # book_list = self.get_queryset()
            # ret = self.get_serializer(book_list, many=True)
            # return Response(ret.data)
            return self.list(request)
    
        def post(self, request):
            # print(request.data)
            # serializer = BookSerializer(data=request.data)
            # if serializer.is_valid():
            #     serializer.save()
            #     return Response(serializer.data)
            # else:
            #     return Response(serializer.errors)
            return self.create(request)
    
    
    # class BookEditView(GenericAPIView, RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin):
    class BookEditView(RetrieveUpdateDestroyAPIView):
        query_set = Book.objects.all()
        serializer_class = BookSerializer
    
        def get(self, request, id):
            # book_obj = Book.objects.filter(id=id).first()
            # ret = BookSerializer(book_obj)
            # return Response(ret.data)
            return self.retrieve(request, id)
    
        def put(self, request, id):
            # book_obj = Book.objects.filter(id=id).first()
            # serializer = BookSerializer(book_obj, data=request.data, partial=True)
            # if serializer.is_valid():
            #     serializer.save()
            #     return Response(serializer.data)
            # else:
            #     return Response(serializer.errors)
            return self.update(request, id)
    
        def delete(self, request, id):
            # book_obj = Book.objects.filter(id=id).first()
            # book_obj.delete()
            # return Response("")
            return self.destroy(request, id)
  • 相关阅读:
    新随笔(二)用户体验:用户注册表单中的“年份”设计乱象
    新随笔(一) 从用户心理体验谈慎用瀑布流设计
    产品经理,你来自江湖
    对你同样重要的非技术贴,8个方法让你成为下一个晋升对象
    非技术贴,10件事证明你跟错了人
    Android开发工程师,前行路上的14项技能
    SVN报错:Error Updating changes:svn:E155037的解决方案同样适用于svn clean up失败解决方案
    方法命名问题
    controller 获取data: JSON.stringify(param)
    毕业设计----maven使用ueditor编辑器
  • 原文地址:https://www.cnblogs.com/zhoulixiansen/p/11154071.html
Copyright © 2020-2023  润新知