首页 > 其他分享 >所有视图的基类、Mixin类视图、通用视图类、子类视图

所有视图的基类、Mixin类视图、通用视图类、子类视图

时间:2022-10-02 12:22:37浏览次数:45  
标签:GenericAPIView get 子类 self 视图 Mixin 提供 方法

APIView是REST framework提供的所有视图的基类,继承自Django的View父类。
APIView与View的不同之处

传入到视图方法中的是REST framework的对象,而不是Django的HttpResponse对象;

视图方法可以返回REST framework的Response对象,视图会为响应数据设置符合前端要求的格式;

任何APIView异常都会被捕获到,并且处理成适合的响应信息;

在进行dispatch分发前,会对请求进行身份认证、权限检查、流量控制。

支持定义的属性

authentication_classes列表或元祖,身份认证类

permissoin_classes列表或元祖,权限检查类

throttle_classes列表或元祖,流量控制类

在APIView中仍以常规的类视图定义方法来实现get() 、post() 或者其他请求方式的方法。

GenericAPIView

rest_framework.generics.GenericAPIView

继承自APIView,增加了对于列表视图和详情图可能用到的通用支持方法,通常使用时,可搭配一个或多个Mixin扩展类。

使用GenericAPIView类一般需要实现queryset属性或者重写get_queryset方法

支持定义的属性

列表视图与详情视图通用:

	queryset列表视图的查询集
	serializer_class视图使用的序列化器

列表视图使用:

	pagination_class分页控制类
	filter_backends过滤控制后端

详情页视图使用:

	lookup_field查询单一数据库对象时使用的条件字段,默认为'pk'
	lookup_url_kwarg查询单一数据时URL中的参数关键字名称,默认与look_field相同

提供的方法

列表视图与详情视图通用:

	get_queryset(self)

	返回视图使用的查询集,是列表视图与详情视图获取数据的基础,默认返回queryset属性,可以重写,例如:

	def get_queryset(self):
		user = self.request.user
		return user.accounts.all()
	get_serializer_class(self)

	返回序列化器类,默认返回serializer_class,可以重写,例如:

	def get_serializer_class(self):
		if self.request.user.is_staff:
			return FullAccountSerializer
		return BasicAccountSerializer
	get_serializer(self,args, *kwargs)
	返回序列化器对象,被其他视图或扩展类使用,如果我们在视图中想要获取序列化器对象,可以直接调用此方法。

	注意,在提供序列化器对象的时候,REST framework会向对象的context属性补充三个数据:request、format、view,这三个数据对象可以在定义序列化器时使用。

详情视图使用:

	get_object(self)返回详情视图所需的模型类数据对象,默认使用lookup_field参数来过滤queryset。 在试图中可以调用该方法获取详情信息的模型类对象。

	若详情访问的模型类对象不存在,会返回404。

	该方法会默认使用APIView提供的check_object_permissions方法检查当前对象是否有权限被访问。

Mixin类视图

使用基于类的视图的最大好处之一是它使我们能够轻松地组合可重用的行为
到目前为止,对于我们创建的任何基于模型操作的API视图,我们一直在使用的create 、 retrieve 、 update 、 delete操作将非常相似。这些常见行为在REST框架的mixin类中实现。

delete操作将非常相似。这些常见行为在REST框架的mixin类中实现。

mixin类提供用于提供基本视图行为的操作。

注意,mixin类提供了操作方法,而不是直接定义处理请求方法(例如.get()和.post())。

mixin类可以从导入rest_framework.mixins。

GenericAPIView 只是提供了数据,对应的访问功能是没有实现的,所以 DRF 还有五个提供方法的混入类,可以完成基本增删改查功能,我们也叫 Mixin 混入类,通过 GenericAPIView 与混入类的多继承,可以实现更加复杂的接口功能 GenericAPIView 提供数据,而混入类提供操作

ListModelMixin、CreateModelMixin 、RetrieveModelMixin、UpdateModelMixin、DestroyModelMixin

通用类视图 generics

通过使用mixin类,我们重写了视图,使其使用的代码比以前稍微少一些,但我们还可以更进一步。REST框架提供了一组已经混合在一起的通用视图,我们可以使用它们来进一步精简views.py模块。

子类视图(三级)

*1) CreateAPIView*
提供 post 方法
继承自: GenericAPIView、CreateModelMixin

*2)ListAPIView*
提供 get 方法
继承自:GenericAPIView、ListModelMixin

*3)RetireveAPIView*
提供 get 方法
继承自: GenericAPIView、RetrieveModelMixin

*4)DestroyAPIView*
提供 delete 方法
继承自:GenericAPIView、DestoryModelMixin

*5)UpdateAPIView*
提供 put 和 patch 方法
继承自:GenericAPIView、UpdateModelMixin

*6)RetrieveUpdateAPIView*
提供 get、put、patch方法
继承自: GenericAPIView、RetrieveModelMixin、UpdateModelMixin

*7)RetrieveUpdateDestoryAPIView*
提供 get、put、patch、delete方法
继承自:GenericAPIView、RetrieveModelMixin、UpdateModelMixin、DestoryModelMixin

标签:GenericAPIView,get,子类,self,视图,Mixin,提供,方法
From: https://www.cnblogs.com/zxr1002/p/16748545.html

相关文章

  • Spring MVC入门(五):视图
    视图简介SpringMVC中的视图是View接口,视图的作用渲染数据,将模型Model中的数据展示给用户SpringMVC视图的种类很多,默认有转发视图和重定向视图当工程引入jstl的依赖,转发视图......
  • drf之视图集
    一、试图基类#我们之前学习的drf在编写视图类的时候是继承了APIView和GenericAPIView#GenericAPIView的属性和方法回顾:-属性-queryset#要......
  • 【Django-rest-framework框架】第04回 视图集
    目录1.两个视图基类1.1GenericAPIview属性和方法1.2基于APIView写5个接口1.3基于GenericAPIview写5个接口2.5个视图扩展类3.9个视图子类4.视图集5.源码分析ViewSet......
  • drf之视图组件
    drf请求与响应1.request请求:通过http请求,经过OSI协议,拿着前端提供的数据给了django,django把请求给了request的对象,drf又对request进行了一次封装,每次请求都是一个新的req......
  • drf请求与相应(Request,Response),drf能够解析的请求编码,响应编码,GenericAPIView和APIVi
    drf请求与响应Request类(请求)Response类(响应)drf 能够解析的请求编码,响应编码能够解析的请求编码响应编码GenericAPIView和APIView(2个视图基......
  • drf之请求与响应,drf之视图组件,2个视图基类
    1.drf之请求与响应在继承drf中的APIView时Request它的请求对象request就不是原来的那个request了(具体去看APIView源码分析),所以没钱请求的request都是一个新的对象,这......
  • MySQL高级 1:视图
    1.视图是什么通俗的讲,视图就是一条SELECT语句执行后返回的结果集。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上。视图是对若干张基本表的引用,一张虚表......
  • drf之请求与响应、drf之视图组件、2个视图基类
    drf之请求与响应Request和Response类继承APIView后,请求对象:request,每一次请求都是一个新的requestRequest类:属性或方法data:POST、PUT、PATCH请求方式解析后的数据......
  • Oracle 12C R2-新特性---实时物化视图
    文字部分基本上都是官方文档翻译过来的,不准确的地方请谅解。物化视图可用于查询重写,即使它们并不完全与基表同步,并且被认为失效。使用物化视图日志与增量计算以及陈旧的物......
  • 了解视图dm_os_performance_counters的cntr_type含义
    dm_os_performance_counters说明该视图用于查看数据库的性能指标,但是不同的指标类型(cntr_type)计算方法有所不同。大概有以下不同类型:selectobject_name,counter_name,ins......