两个基类
一、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/123284.html