首页 > 其他分享 >视图组件

视图组件

时间:2024-04-21 21:59:08浏览次数:17  
标签:GenericAPIView get APIView 视图 组件 序列化 方法

两个视图基类

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. 需要自动生成路由

标签:GenericAPIView,get,APIView,视图,组件,序列化,方法
From: https://www.cnblogs.com/Hqqqq/p/18149564

相关文章

  • 路由组件
    Routers​ 对于视图集ViewSet,我们除了可以自己手动指明请求方式与动作action之间的对应关系,还可以使用Routers类来快速实现路由的创建SimpleRouter(常用)DefaultRouter(用的少)#方式一#1.导入Routers类fromrest_framework.routersimportDefaultRouter#2.实例化对......
  • 在React中的函数组件和类组件——附带示例的对比
    在React中,创建组件有两种主要方式:函数组件和类组件。每种方式都有自己的语法和用例,尽管随着ReactHooks的引入,它们之间的差距已经显著缩小。但选择适当的组件类型对于构建高效和可维护的React应用程序仍然非常关键。在本文中,我们将探讨函数和类组件之间的基本区别,清楚地理解它们......
  • vue中ts引入组件,无法找到模块xxx的声明文件。xxx隐式拥有 "any" 类型。
    原因说明简单来说就是ts不认识.vue这个类型,需要定义声明。我刚学ts不是很懂为什么vite官方内写了那么多类型声明就是不写.vue。解决方法在项目根目录下找到env.d.ts文件,这个文件定义类型声明,简单地说就是让ts认识各种类型,尤其是文件。那么解决方法显而易见,我们自定义vue的......
  • 鸿蒙HarmonyO实战-ArkUI动画(组件内转场动画)
    ......
  • mysql视图的基本用法
    MySQL视图(View)是一种虚拟的表,它基于一个或多个实际表的查询结果构建而成。视图可以像表一样被查询,但实际上它并不存储数据,而是根据定义时指定的查询规则动态生成结果。MySQL视图的基本用法包括创建视图、查询视图、更新视图以及删除视图。以下是MySQL视图的基本用法:创建视图(Crea......
  • 微信小程序video在组件中的使用---暂停视频
    首先在wxml文件中设置video的id<videoid='myVideo'src='{{video}}'controls='true'></video>然后在js文件中通过wx.createVideoContext获取VideoContext实例letvideoCtx=nullletapp=getApp()Component({properties:{},......
  • 数据库的物化视图
    数据库的物化视图数据库的物化视图(MaterializedView)是一种预先计算和存储的查询结果集,可以提高查询性能和减少查询开销。与普通视图不同,物化视图是实际存储在磁盘上的表,而不是只是一个查询语句。物化视图可以在需要时更新,以保持其数据的实时性。优点提高查询性能:物化视图可以......
  • taro 基础组件 video的一些基本情况设置
    <videoclass="section-video-content"id="myVideo"src="http://192.168.10.15:9000/sisterofdc/exam/video/226/test.mp4"@timeupdate='getUpdateTime'></video>function......
  • vue 给不同组件数据添加千分位符且保留两位小数
    方法一:使用filter过滤器的方法给普通元素添加千分位符且保留两位小数<template><divclass="app-container">{{obj|modifyObject}}{{obj1|modifyObject}}</div></template><script>exportdefault{components:{},data()......
  • 【云原生|K8s系列第1篇】:K8s的基础概念、组件架构及实战安装
    1、先从K8s不是什么讲起首先,K8s并不是一个传统意义上的PaaS平台即服务的工具,它充分给使用者提供了很多很多选择的空间。不限制支持的应用程序类型,K8s并不插手应用程序框架,也不限制支持的语言(如Java,Python,Ruby等),只要应用符合12因素即可。也就是说,只需要应用可以在......