视图介绍
作用
- 控制序列化器的执行(检验、保存、转换数据)
- 控制数据库查询的执行
- 简化视图的编写

两个视图基类
APIView
导入:from rest_framework.views import APIView
APIView 是REST framework 提供的所有视图的基类,继承了View父类,对原生的request对象进行了封装。并重写了dispatch方法,对认证,权限,频率控制,并处理全局异常。
没有操作数据库,需要你自己去写get、post

GenericAPIView
导入:from rest_framework.generics import GenericAPIView
GenericAPIView继承了APIView增加了序列化数据和序列化的类为Mixin扩展类提供支持
常用属性
| 属性 | 作用 |
|---|---|
| queryset | 需要序列化的查询集 |
| serializer_class | 指定使用的序列化器 |
| pagination_class | 分页控制类 |
| filter_backends | 过滤控制后端 |
| lookup_field | 查询时的查询条件,默认为pk |
常用方法
| 方法 | 作用 |
|---|---|
| get_queryset() | 查询获取所有记录 |
| get_object() | 获取一条数据对象 |
| get_serializer() | 获取配置的序列化类 |
五个视图扩展类
| 扩展类 | 提供方法 | 用途 |
|---|---|---|
ListModelMixin |
list() |
获取多条数据对象 |
CreateModelMixin |
create() |
新增单一数据对象 |
RetrieveModelMixin |
retrieve() |
获取单一数据对象 |
UpdateModelMixin |
update() |
更新一条数据对象 |
DestroyModelMixin |
destroy() |
删除一条数据对象 |
九个子类视图
| 子类 | 提供方法 | 继承自 |
|---|---|---|
CreateAPIView |
提供 post方法 |
GenericAPIView、 CreateModelMixin |
ListAPIView |
提供 get方法 |
GenericAPIView、 ListModelMixin |
RetireveAPIView |
提供 get方法 |
GenericAPIView、 RetrieveModelMixin |
DestoryAPIView |
提供 delete方法 |
GenericAPIView、 DestoryModelMixin |
UpdateAPIView |
提供 put和 patch方法 |
GenericAPIView、 UpdateModelMixin |
ListCreateAPIView |
提供 get、 post方法 |
GenericAPIView、 ListModelMixin、 CreateModelMixin |
RetrieveUpdateAPIView |
提供 get、 put、 patch方法 |
GenericAPIView、 RetrieveModelMixin、 UpdateModelMixin |
RetrieveDestroyAPIView |
提供 get、 put、 patch方法 |
GenericAPIView、 RetrieveModelMixin、 DestoryModelMixin |
RetrieveUpdateDestoryAPIView |
提供get、 put、 patch、 delete方法 |
GenericAPIView、 RetrieveModelMixin、 UpdateModelMixin、 DestoryModelMixin |
ViewSet视图集
ViewSetMixin
ViewSetMixin重写了as_view,路由写法变了 eg:as_view({'get': 'list', 'post': 'create'})
# ViewSetMixin 源码分析class ViewSetMixin:@classonlymethoddef as_view(cls, actions=None, **initkwargs):# actions={'get': 'list', 'post': 'create'}def view(request, *args, **kwargs):# method:get action:listfor method, action in actions.items():# handler就是listhandler = getattr(self, action) #视图类反射有没有list# 反射:把list变成了getsetattr(self, method, handler)return self.dispatch(request, *args, **kwargs)return csrf_exempt(view)
ViewSet
继承 : APIView、 ViewSetMixin
ViewSet视图集类不再实现get()、post()等方法,而是实现动作action如list() 、create() 等
视图集只在使用as_view()方法的时候,才会将action动作与具体请求方式对应上
GenericViewSet
继承:ViewSetMixin、GenericAPIView
ReadOnlyModelViewSet
继承:RetrieveModelMixin、ListModelMixin、GenericViewSet
ModelViewSet
继承了五个视图扩展类
