django Rest Framework----GenericAPIView 通用视图 GenericAPIView源码分析
一、GenericAPIView
GenericAPIView扩展了APIView,为标准列表和详细视图添加了常见的行为。
提供的每个具体通用视图都是一个GenericAPIView或多个mixin类组合在一起而构建的。
例如:
BookView视图类继承自:
ListModelMixin:用于显示所有图书
CreateModelMixin:添加一本书
GenricAPIView:继承自APIView,提供as_view()等,获取当前视图类中queryset和serializer_class ,用于给ListModelMixin和CreateModelMixin使用。
class BookView(mixins.ListModelMixin,
mixins.CreateModelMixin,
generics.GenericAPIView): queryset = models.Book.objects.all()
serializer_class = BookModelSerializer def get(self,request, *args, **kwargs):
return self.list(request, *args, **kwargs) def post(self,request,*args,**kwargs):
return self.create(request,*args,**kwargs) .......
二、GenericAPIView做了哪些事
1.获取queryset数据,用于所有后续的操作
def get_queryset(self):
# 断言,满足我的条件参会向下执行,否则不执行
# 所以必须视图类必须提供一个queryset,例如BookView视图类中第一行
assert self.queryset is not None, (
"'%s' should either include a `queryset` attribute, "
"or override the `get_queryset()` method."
% self.__class__.__name__
)
# 获取当前类中的queryset
queryset = self.queryset
if isinstance(queryset, QuerySet):
queryset = queryset.all()
return queryset
2. 获取当前类serializer_class : 该用于验证和反序列化输入以及序列化输出的序列化程序类
def get_serializer_class(self):
#断言:必须满足条件才行
assert self.serializer_class is not None, (
"'%s' should either include a `serializer_class` attribute, "
"or override the `get_serializer_class()` method."
% self.__class__.__name__
)
#返回当前实例对象的serializer_class
return self.serializer_class
3. lookup_field :用于执行各个模型实例的对象查找的模型字段。默认是'pk'。
需要注意,使用超链接的API时,您需要确保双方的API意见和串行类设置查找字段
url(r'books/(?P<pk>\d+)/$',views.BookDetailView.as_view({'get': 'retrieve','put':'update','delete':'destroy'})),
4. 分页
与列表视图一起使用时,以下属性用于控制分页。
pagination_class :分页列表结果时应使用的分页类。默认值与DEFAULT_PAGINATION_CLASS设置值相同,即'rest_framework.pagination.PageNumberPagination'。设置pagination_class=None将禁用此视图的分页。
5.过滤
filter_backends - 应该用于过滤查询集的过滤后端类列表。默认值与DEFAULT_FILTER_BACKENDS设置相同。
django Rest Framework----GenericAPIView 通用视图 GenericAPIView源码分析的更多相关文章
- Django REST framework认证权限和限制 源码分析
1.首先 我们进入这个initial()里面看下他内部是怎么实现的. 2.我们进入里面看到他实现了3个方法,一个认证,权限频率 3.我们首先看下认证组件发生了什么 权限: 啥都没返回,self.per ...
- Django_Restframwork_APIVIEW视图_源码分析
Django _VIEW视图_源码分析
- Django(50)drf异常模块源码分析
异常模块源码入口 APIView类中dispatch方法中的:response = self.handle_exception(exc) 源码分析 我们点击handle_exception跳转,查看该 ...
- Django 之 restframework 版本控制的使用以及源码分析
Django rest_framework 之 版本控制 一.何为版本控制: 用于版本的控制 二.内置的版本控制类: from rest_framework.versioning import Q ...
- Django框架(十八)—— CBV源码分析、restful规范、restframework框架
目录 CBV源码分析.restful规范.restframework框架 一.CBV源码分析 1.url层的使用CBV 2.as_view方法 3.view方法 4.dispatch方法(可以在视图层 ...
- Django(48)drf请求模块源码分析
前言 APIView中的dispatch是整个请求生命过程的核心方法,包含了请求模块,权限验证,异常模块和响应模块,我们先来介绍请求模块 请求模块:request对象 源码入口 APIView类中di ...
- Django(49)drf解析模块源码分析
前言 上一篇分析了请求模块的源码,如下: def initialize_request(self, request, *args, **kwargs): """ Retu ...
- Django(51)drf渲染模块源码分析
前言 渲染模块的原理和解析模块是一样,drf默认的渲染有2种方式,一种是json格式,另一种是模板方式. 渲染模块源码入口 入口:APIView类中dispatch方法中的:self.response ...
- Django Rest Framework----ModelViewSet视图 ModelViewSet源码分析
一.视图类 #bookview是一个视图类,继承自ModelViewSet class BookView(ModelViewSet): throttle_classes = [VisitThrottl ...
- python-django rest framework框架之dispatch方法源码分析
1.Django的 CBV 中在请求到来之后,都要执行dispatch方法,dispatch方法根据请求方式不同触发 get/post/put等方法 class APIView(View): def ...
随机推荐
- MT【126】点对个数两题之二【图论】
在平面上有\(n\) 个点$S={x_1,x_2\cdots,x_n}, $ 证明在这 \(n\) 个点中距离为 \(1\) 的点对数不超过 \(\dfrac{n}{4}+\dfrac{2}{2}n^ ...
- 【BZOJ2830/洛谷3830】随机树(动态规划)
[BZOJ2830/洛谷3830]随机树(动态规划) 题面 洛谷 题解 先考虑第一问. 第一问的答案显然就是所有情况下所有点的深度的平均数. 考虑新加入的两个点,一定会删去某个叶子,然后新加入两个深度 ...
- 【ARC077F】SS
Description 如果某个串可以由两个一样的串前后连接得到,我们就称之为"偶串".比如说"xyzxyz"和"aaaaaa"是偶串,而& ...
- 洛谷 P4292 [WC2010]重建计划 解题报告
P4292 [WC2010]重建计划 题目描述 \(X\)国遭受了地震的重创, 导致全国的交通近乎瘫痪,重建家园的计划迫在眉睫.\(X\)国由\(N\)个城市组成, 重建小组提出,仅需建立\(N-1\ ...
- linux内核分析 第六周读书笔记
第三章 进程管理 3.1 进程 进程:处于执行期的程序 线程是在进程活动中的对象:内核调度的对象是线程而不是进程,在Linux系统中,并不区分线程和进程 在现代操作系统中, 进程提供两种虚拟机制:虚拟 ...
- Python之旅:列表
Python列表脚本操作符 列表对 + 和 * 的操作符与字符串相似.+ 号用于组合列表,* 号用于重复列表. 如下所示: Python 表达式 结果 描述 len([1, 2, 3]) 3 长度 [ ...
- linux内核增加系统调用--Beginner's guide
Linux内核中设置了一组用于实现系统功能的子程序,称为系统调用.系统调用和普通库函数调用非常相似明知是系统调用由操作系统核心提供,运行于核心态,而普通的函数调用由函数库或用户自己提供,运行于用户态. ...
- 2.Helloworld
1.对于Qt程序来说,main()函数一般以创建application对象(gui是QApplication,非gui程序是QCoreApplication.QApplication实际上是QCore ...
- Cloudstack 虚拟机实例(四)
虚拟机实例 默认的模板并没有被下载 修改全局设置 secstorage.allowed.internal.sites 设置 ,二级存储ISO镜像和模板可以下载,IP网段 重启服务/etc/init. ...
- Java基础-面向对象第三大特性之多态(polymorphism)
Java基础-面向对象第三大特性之多态(polymorphism) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.多态概述 多态是继封装,继承之后,面向对象的第三大特性,多态的 ...