视图:
视图函数继承表
|->mixins.CreateModelMixin, POST创建
|->mixins.RetrieveModelMixin, Retrieve(get)显示单条
ModelViewSet |->mixins.UpdateModelMixin, put,patch更新
|->mixins.DestroyModelMixin, destory 删除
|->mixins.ListModelMixin, list(get) 查询所有
| |->ViewSetMixin
|->GenericViewSet |
|->generics.GenericAPIView|->views.APIView|->View
自定义视图:
1、如果只是要执行增删改查,继承ModelViewSet即可实现
2、如果要执行增删改查其中的几项的话,可以只继承mimins.xxx
3、如果要执行复杂逻辑的话,可以继承GenericAPIView或者APIView,实现自己的逻辑操作
from rest_framework.viewsets import ModelViewSet
from rest_framework.pagination import PageNumberPagination
class xxx(ModelViewSet):
#查询结果集
queryset = models.XXX.objects.all()
#序列化的类
serializer_class = xxxxx
#分页的类
pagination_class = PageNumberPagination
一:GenericAPIView,继承自APIView, 可以搭配扩展类使用,特点如下:
1、定义类视图使用的序列化器和查询集(属性);
-
queryset 列表视图的查询集 (queryset = xxx)
-
serializer_class 视图使用的序列化器(serializer_class = sss)
2、分页和过滤的控制(属性);
-
pagination_class 分页控制类
-
filter_backends 过滤控制后端
3、配合get_obiect()使用的(属性);
- lookup_field 查询单一数据库对象时使用的条件字段,默认为’pk’
- lookup_url_kwarg 查询单一数据时URL中的参数关键字名称,默认与look_field相同
4、查询集的获取/更改:
- get_queryset(self) :默认返回queryset属性,可以重写成自己需要的查询集;
5、获取序列化器对象:
-
get_serializer:默认返回的是系列化器对象;
-
注意,在提供序列化器对象的时候,REST
framework会向对象的context属性补充三个数据:request、format、view,这三个数据对象可以在定义序列化器时使用,也就是说在序列化器类中,可以通过self.context[‘request’],获取对应的请求对象
6、context属性:
- get_serializer_context(self):
- 这个是给序列化器返回的一个context属性,context属性里面有‘request’,‘format’,‘view’值可以在序列化器类中使用。与5中的描述相对应
7、获取序列化器;
- get_serializer_class(self):获取需要使用的序列化器,根据需求可以重写获取不同的序列化器;
8、获取对应的模型类对象:
- get_object(self): 默认使用lookup_field参数来过滤queryset。
若详情访问的模型类对象不存在,会返回404。
该方法会默认使用APIView提供的check_object_permissions方法检查当前对象是否有权限被访问。
二:另外的扩展类
1、ListModelMixin
列表视图扩展类,提供list(request, args, *kwargs)方法快速实现列表视图(所有数据),返回200状态码。
该Mixin的list方法会对数据进行过滤和分页,如果不需要分页,那么需要设置pagination_class=None
2、CreateModelMixin
创建视图扩展类,提供create(request, *args, **kwargs)方法快速实现创建资源的视图,成功返回201状态码。
3、RetrieveModelMixin
详情视图扩展类,提供retrieve(request, *args, **kwargs)方法,可以快速实现返回一个存在的数据对象。
如果存在,返回200, 否则返回404
4、UpdateModelMixin
更新视图扩展类,提供update(request, *args, **kwargs)方法,可以快速实现更新一个存在的数据对象。
同时也提供partial_update(request, *args, **kwargs)方法,可以实现局部更新。 成功返回200,序列化器校验数据失败时,返回400错误。
5、DestroyModelMixin
删除视图扩展类,提供destroy(request, *args, **kwargs)方法,可以快速实现删除一个存在的数据对象。
成功返回204,不存在返回404。