django_rest_framework之GenericAPIView(一)源码讲解

导读:本篇文章讲解 django_rest_framework之GenericAPIView(一)源码讲解,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

1、GenericAPIView是APIView的子类,所以具备APIView的所有功能
a、具备View的所有特性
b、提供了认证、授权、限流功能
c、将JsonResponse——》Response(如果是序列化输出多条数据将safe=False去掉)
d、通过request.data获取前端传递的参数,后端通过请求头中的content_Type参数,生成指定的数据类型(application / json、application / x – www – form – urlencoded、multipart / form – data)
GenericAPIView
除了具备APIView的所有功能外,还具备了自己额外的功能

在这里插入图片描述
2、一旦继承GenericAPIView父类(GenericAPIView的子类)
a、具备View的所有特性
b、具备了认证、授权、限流功能
c、还支持对于获取列表数据接口的功能:搜索、排序、分页
GenericAPIView需要指定queryset、serializer_class类属性
queryset:指定当前类视图的实例方法需要使用的查询集对象
serializer_class:指定当前类视图的实例方法需要的序列化器类

导入 from rest_framework.generics import GenericAPIView
在这里插入图片描述
3、代码最好不要直接用下列代码
queryset=self.queryset、serializer=self.serializers_class(instance=self.queryset, many=True)
建议用
queryset=self.get_queryset()
serializer = self.get_serializer(instance=queryset, many=True)

在这里插入图片描述
源码分析:
在这里插入图片描述
在这里插入图片描述
为什么要这么做呢?我直接用类属性queryset=self.queryset不就可以吗???

原因:为了以后可以重写get_queryset方法,例如用户有权限(获取的是完整的数据)和用户无权限(获取的是部分简单的数据)下获取到的列表数据不是一套查询集,接口之间用到的数据集不同

源码分析:
在这里插入图片描述
注意:
1、在实例方法中,往往使用get_queryset()方法获取查询集对象
2、一般不会直接调用queryset类属性,原因:为了提供让用户重写get_queryset()方法
3、如果未重写get_queryset()方法,那么必须得指定queryset类属性
4、在实例方法中,往往使用get_serializer方法获取序列化器类
5、一般不会直接调用serializer_class类属性,原因:为了提供让用户重写get_serializer_class()方法
6、如果未重写get_serializer_class()方法,那么必须得指定serializer_class类属性
4、get_object()方法
在这里插入图片描述
在这里插入图片描述
1、父类给提供了get_object()方法,不需要重写,直接继承,代码如下:
在这里插入图片描述
2、pk也不用传递,可以源码调试
在这里插入图片描述
结果如下图
在这里插入图片描述
3、如果路由视图我设置为kk
在这里插入图片描述
只需要在类中定义属性:lookup_url_kwarg = ‘kk’
在这里插入图片描述
在这里插入图片描述
a、lookup_url_kwarg默认为None
b、如果lookup_url_kwarg默认为None,那么lookup_url_kwarg与look_field相同(pk)
c、lookup_url_kwarg指定url路由条目中外键的路径参数名称
lookup_url_kwarg = ‘kk’
d、如果不传lookup_url_kwarg(一般不需要传递),默认为pk,如果传递的话需要在前端路由中指定

get_object可以获取模型对象,无需传递外键值

5、最后优化的代码如下:
在这里插入图片描述
在这里插入图片描述

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

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

(0)
小半的头像小半

相关推荐

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