mixin
- RetrieveModelMixin
- 提供了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):
- get方法
- 继承mixins.RetrieveModelMixin, GenericAPIView
-
UpdateAPIView(mixins.UpdateModelMixin, GenericAPIView)
1,put和patch方法
2,继承mixins.UpdateModelMixin,GenericAPIView