视图组件
两个视图基类
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
- get_queryset(self) :查所有
五个视图扩展类
# 这五个视图扩展类需要搭配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#
- 无需序列化类
- 不与数据库打交道
- 如:发送短信接口,发送邮件接口
GenericAPIView#
- 需要序列化类
- 与数据库打交道
- 如:登录注册接口
五个视图拓展类(必须配合GenericAPIView)#
- 适用于五个常见的增删改查
九个视图子类#
- 如果要写五个接口之一或者之多,直接使用它
ViewSet#
- 需要自动生成路由,或者想要路由映射
- 不与数据库打交道
- 不需要序列化类
GenericViewSet#
- 需要自动生成路由,或者想要路由映射
- 与数据库打交道
- 需要序列化类
- 如 登录注册
ModelViewSet#
- 五个接口都要写
- 需要自动生成路由
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!