Loading

视图组件

两个视图基类

APIView

# APIView 是rest-framwork提供的所有视图类的基类,它继承自django的View类

# 在APIView中仍然以常规的类视图定义方法来实现get()、post()...请求方式的方法

APIView和View的区别

  • 传入到视图方法中的请求对象是rest-framwork的Reqeust类的对象,而不是django的HttpResponse类的对象
  • APIView返回的是rest-framwork的Response类的对象,会响应前端要求的格式
  • 会捕获全局异常,并且处理
  • 在dispatch分发之前会进行三大认证

支持定义的类的属性

authentication_classes列表或元组(身份认证类)
permissoin_classes列表或元组(权限检查类)
throttle_classes列表或元组(流量/频率控制类)

GenericAPIView(通用视图类)

# GenericAPIView继承自APIView,主要增加了 操作序列化类对象 和 数据库查询 的方法,作用是为Mixin扩展类的执行提供方法支持,通常在使用时要搭配一个或多个Mixin扩展类

# 涉及到数据库操作,尽量选择GenericAPIView,以此减少代码量

提供的关于序列化器使用的属性与方法

  • 属性
    • seaializer_class:指定对应的序列化类
  • 方法
    • get_serializer_class(self)
    • get_serializer(self, *args, **kwargs)

提供的关于数据库查询的属性与方法

  • 属性
    • queryset :查询的表名.objects.all() (这里不写all会自动添加上all,但推荐都写上)
  • 方法
    • get_queryset(self) :查所有
      get_object(self) :查单条 不存在返回404

五个视图扩展类

# 这五个视图扩展类需要搭配GenericAPIView类使用,因为他们的功能的实现需要调用GenericAPIView提供的数据库查询方法和序列化类方法

# CreateModelMixin
内部有create方法 :新增

#ListModelMixin
内部有list方法 :查询所有

#DestroyModelMixin
内部有destroy方法 :删除单条

#UpdateModelMixin
内部有update方法 :修改一条

#RetrieveModelMixin
内部有retrieve方法 :查询单条

九个视图子类

ListAPIView

  • list

CreateAPIView

  • create

UpdateAPIView

  • update

DestroyAPIView

  • destroy

RetrieveAPIView

  • retrieve

RetrieveUpdateDestroyAPIView

  • retrieve+update+destroy

RetrieveDestroyAPIView

  • retrieve+destroy

RetrieveUpdateAPIView

  • retrieve+update

ListCreateAPIView

  • list+create

视图集

ViewSetMixin

# 核心:重写了as_view方法

# 能够实现:请求方式和视图类中方法的映射

# 结论:只要继承ViewSetMixin的视图类,路由中as_view()里就要传action参数(字典)

例
	path('books/', views.BookView.as_view({'get':'list','post':'create'}))

ViewSet

  • 继承自APIView与ViewSetMixin,作用与APIView类似
  • 主要通过ViewSetMixin重写的as_view,来完成调用as_view()时传入字典的映射处理
  • 没有提供任何action方法,也就是视图类里的方法
  • 需要自己编写list、retrieve、create、update、destroy等方法,如as_view({'get': 'retrieve', 'put': 'update', 'delete': 'destroy'})

GeneriViewSet

  • 继承自GenericAPIView与ViewSetMixin
  • 实现了调用as_view()时传入字典的映射处理
  • 提供了GenericAPIView提供的基础方法,可以直接搭配Mixin扩展类使用

ModelViewSet

  • 继承自GenericAPIView和五个视图扩展类

ReadOnlyModelViewSet

  • 继承自GenericAPIView和ListModelMixin、RetrieveModelMixin

如何选择视图类

APIView

  1. 无需序列化类
  2. 不与数据库打交道
  3. 如:发送短信接口,发送邮件接口

GenericAPIView

  1. 需要序列化类
  2. 与数据库打交道
  3. 如:登录注册接口

五个视图拓展类(必须配合GenericAPIView)

  1. 适用于五个常见的增删改查

九个视图子类

  1. 如果要写五个接口之一或者之多,直接使用它

ViewSet

  1. 需要自动生成路由,或者想要路由映射
  2. 不与数据库打交道
  3. 不需要序列化类

GenericViewSet

  1. 需要自动生成路由,或者想要路由映射
  2. 与数据库打交道
  3. 需要序列化类
  4. 如 登录注册

ModelViewSet

  1. 五个接口都要写
  2. 需要自动生成路由
posted @ 2024-04-21 21:45  HuangQiaoqi  阅读(1)  评论(0编辑  收藏  举报