美文网首页
(18)Django Rest framwork-优化二(mix

(18)Django Rest framwork-优化二(mix

作者: 足__迹 | 来源:发表于2019-10-29 00:54 被阅读0次

    mixin

    • RetrieveModelMixin
    1. 提供了retrieve(request,*args, **kwargs)方法
      2.获取一条详情数据(一条记录)
      3.获取成功,返回200
      4,不存在,返回404
    • UpdateModelMixin
      1,update(request, *args, **kwargs)用于全量更新
      2, partial_update(self, request, *args, **kwargs) 由于部分更新
      3,更新已经存在的模型实例(一条记录)
      4,成功200
      5,参数错误,400
      6,不存在404
    • DestroyModelMixin
      1,destroy(self, request, *args, **kwargs)
      2,删除一条数据
      3,成功返回204
      4,失败返回404
    • ListModelMixin
      1,list(self, request, *args, **kwargs)方法
      2,获取已经提供的数据列表
      3,成功200
    • CreateModelMixin
      1,提供了create(self, request, *args, **kwargs)方法
      2,创建新的模型实例
      3,如果创建成功返回201
      4,如果参数有误,返回404

    痛点:

    1,视图中有两个类,当前无法合并
    2,接口的URL地址不一致

    优化,使用generices

    • 优化前:
    
    class ProjectsView(mixins.ListModelMixin,mixins.CreateModelMixin,GenericAPIView):
    
    
        # 指定查询集合(所有的查询数据)
        queryset = Projects.objects.all()
        # 指定序列化器
        serializer_class = ProjectModelSerializer
        # 在视图类中指定过滤引擎(可以指定多个过滤器) OrderingFilter排序过滤器  DjangoFilterBackend(筛选)
        filter_backends = [filters.OrderingFilter,DjangoFilterBackend]
        # 对特定字段进行排序,指定排序的字段
        ordering_fields = ['name', 'leader']
        #对特定的筛选字段
        filterset_fields = ['name', 'leader']
    
        def get(self, request,*args, **kwargs):
    
    
            return  self.list(request,*args,**kwargs)
    
        def post(self, request,*args, **kwargs):
    
    
            return self.create(request,*args, **kwargs)
    
    
    # 需要继承GenericAPIView
    class ProjrctView2(mixins.RetrieveModelMixin,mixins.UpdateModelMixin,mixins.DestroyModelMixin,GenericAPIView):
        # 必须指定queryset和serializer_class
    
        queryset = Projects.objects.all()  # 用于指定需要使用的查询集
    
        serializer_class = ProjectModelSerializer  # 用于指定用到的序列化器类
    
        filter_backends = [filters.OrderingFilter] #指定排序过滤引擎
    
    
        #如果使用不是pk可以自定义lookup_field,可以修改
        # lookup_field = 'id'
    
        def get(self, request, *args, **kwargs):
    
    
            return  self.retrieve(request,*args, **kwargs)
    
        def put(self, request, *args, **kwargs):
    
            return  self.update(request, *args, **kwargs)
    
    
        def delete(self, request, *args, **kwargs):
    
    
            return self.destroy(request, *args, **kwargs)
    
    
    • 优化后:
      1,generices
    
    class ProjectsView(generics.ListCreateAPIView,GenericAPIView):
    
    
        # 指定查询集合(所有的查询数据)
        queryset = Projects.objects.all()
        # 指定序列化器
        serializer_class = ProjectModelSerializer
        # 在视图类中指定过滤引擎(可以指定多个过滤器) OrderingFilter排序过滤器  DjangoFilterBackend(筛选)
        filter_backends = [filters.OrderingFilter,DjangoFilterBackend]
        # 对特定字段进行排序,指定排序的字段
        ordering_fields = ['name', 'leader']
        #对特定的筛选字段
        filterset_fields = ['name', 'leader']
    
       
    
    
    # 需要继承GenericAPIView
    class ProjrctView2(generics.RetrieveUpdateDestroyAPIView,GenericAPIView):
        # 必须指定queryset和serializer_class
    
        queryset = Projects.objects.all()  # 用于指定需要使用的查询集
    
        serializer_class = ProjectModelSerializer  # 用于指定用到的序列化器类
    
        filter_backends = [filters.OrderingFilter] #指定排序过滤引擎
    
    
        #如果使用不是pk可以自定义lookup_field,可以修改
        # lookup_field = 'id'
    
    

    generice

    • 提供 RetrieveAPIView(mixins.RetrieveModelMixin, GenericAPIView):
      1. get方法
      2. 继承mixins.RetrieveModelMixin, GenericAPIView
    • UpdateAPIView(mixins.UpdateModelMixin, GenericAPIView)
      1,put和patch方法
      2,继承mixins.UpdateModelMixin,GenericAPIView


      image.png
      image.png

    相关文章

      网友评论

          本文标题:(18)Django Rest framwork-优化二(mix

          本文链接:https://www.haomeiwen.com/subject/gmobvctx.html