【DRF】DRF视图父类(6)

导读:本篇文章讲解 【DRF】DRF视图父类(6),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

两个基类

一、APIView

rest_framework.views.APIView

APIView是REST framework提供的所有视图的基类,继承⾃Django的View⽗类。

APIView与View的不同之处在于:

1、传⼊到视图⽅法中的是REST framework的Request对象,⽽不是Django的HttpRequest对象
2、视图⽅法可以返回REST framework的Response对象,视图会为响应数据设置(render)符合前端要求的格式
3、任何APIException异常都会被捕获到,并且处理成合适的响应信息;
4、在进⾏dispatch()分发前,会对请求进⾏身份认证、权限检查、流量控制

⽀持定义的属性:

1、authentication_classes 列表或元祖,身份认证类
2、permissoin_classes 列表或元祖,权限检查类
3、throttle_classes 列表或元祖,流量控制类

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

二、GenericAPIView

rest_framework.generics.GenericAPIView

继承⾃APIVIew,增加了对于列表视图和详情视图可能⽤到的通⽤⽀持⽅法。通常使⽤时,可搭配⼀个或多个Mixin扩展类。

⽀持定义的属性

  • 列表视图与详情视图通⽤:

    • queryset 列表视图的查询集
    • serializer_class 视图使⽤的序列化器
  • 列表视图使⽤:

    • pagination_class 分⻚控制类
    • filter_backends 过滤控制后端
  • 详情⻚视图使⽤:

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

提供的⽅法:

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

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

def get_queryset(self): 
	return NewsChannel.objects.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⽅法检查当前对象是否有权限被访问。

三、五个扩展类

ListModelMixin

列表视图扩展类,提供list(request, *args, **kwargs)⽅法快速实现列表视图,返回200状态码。

CreateModelMixin

创建视图扩展类,提供create(request, *args, **kwargs)⽅法快速实现创建资源的视图,成功返回201状态码。
如果序列化器对前端发送的数据验证失败,返回400错误。

RetrieveModelMixin

详情视图扩展类,提供retrieve(request, *args, **kwargs)⽅法,可以快速实现返回⼀个存在的数据对象。
如果存在,返回200, 否则返回404。

UpdateModelMixin

更新视图扩展类,提供update(request, *args, **kwargs)⽅法,可以快速实现更新⼀个存在的数据对象。
同时也提供partial_update(request, *args, **kwargs)⽅法,可以实现局部更新。成功返回200,
序列化器校验数据失败时,返回400错误。

DestroyModelMixin

删除视图扩展类,提供destroy(request, *args, **kwargs)⽅法,可以快速实现删除⼀个存在的数据对象。成功返回204,不存在返回404。

四、⼏个可⽤⼦类视图

CreateAPIView

提供 post ⽅法继承⾃: GenericAPIView、CreateModelMixin

ListAPIView

提供 get ⽅法继承⾃:GenericAPIView、ListModelMixin

RetireveAPIView

提供 get ⽅法继承⾃: GenericAPIView、RetrieveModelMixin

UpdateAPIView

提供 put 和 patch ⽅法继承⾃:GenericAPIView、UpdateModelMixin

DestoryAPIView

提供 delete ⽅法继承⾃:GenericAPIView、DestoryModelMixin

RetrieveUpdateAPIView

提供 get、put、patch⽅法继承⾃: GenericAPIView、RetrieveModelMixin、UpdateModelMixin

RetrieveUpdateDestoryAPIView

提供 get、put、patch、delete⽅法继承⾃:GenericAPIView、RetrieveModelMixin、UpdateModelMixin、DestoryModelMixin

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/74058.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!