视图介绍

作用

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

DRF之视图组件 - 图1

两个视图基类

APIView

导入:from rest_framework.views import APIView

APIViewREST framework 提供的所有视图的基类,继承了View父类,对原生的request对象进行了封装。并重写了dispatch方法,对认证,权限,频率控制,并处理全局异常。

没有操作数据库,需要你自己去写getpost

DRF之视图组件 - 图2

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'})

  1. # ViewSetMixin 源码分析
  2. class ViewSetMixin:
  3. @classonlymethod
  4. def as_view(cls, actions=None, **initkwargs):
  5. # actions={'get': 'list', 'post': 'create'}
  6. def view(request, *args, **kwargs):
  7. # method:get action:list
  8. for method, action in actions.items():
  9. # handler就是list
  10. handler = getattr(self, action) #视图类反射有没有list
  11. # 反射:把list变成了get
  12. setattr(self, method, handler)
  13. return self.dispatch(request, *args, **kwargs)
  14. return csrf_exempt(view)

ViewSet

继承 : APIViewViewSetMixin

ViewSet视图集类不再实现get()post()等方法,而是实现动作actionlist()create()

视图集只在使用as_view()方法的时候,才会将action动作与具体请求方式对应上

GenericViewSet

继承:ViewSetMixinGenericAPIView

ReadOnlyModelViewSet

继承:RetrieveModelMixinListModelMixinGenericViewSet

ModelViewSet

继承了五个视图扩展类