Django DRF APIView源码运行流程详解
作者:Wanlei 发布时间:2022-10-29 01:21:44
标签:Django,DRF,APIView,源码
首先写一个简单的drf接口
from rest_framework.views import APIView
from rest_framework.response import Response
# 基于drf写接口,cbv
class DrfTest(APIView):
def get(self, request,*args,**kwargs):
print(type(request._request))
print(type(request))
print(request.POST)
print(request.GET)
response = {'status':100,'errors':None}
response['users'] = user_list
return Response(response)
def post(self,request,*args,**kwargs):
name = request.data.get('name')
print(name)
return HttpResponse('ok')
url(r'DrfTest/',views.DrfTest.as_view()),
通过路由配置 点入查看源码,首先进入到APIView的as_view的方法中:
查找dispatch方法:
如果自己所定义的class DrfTest(APIView)没有手撸dispatch的情况下,下一步,找到APIView里的dispatch方法:
当中有一个self.initial(request, *args, **kwargs)方法:
至此,简单分析如上:回到最开始定义类的过程:
流程总结
请求来了,执行了View类中as_view的view()方法,本质上执行了self.dispatch方法
按顺序查找dispatch方法(自己类中,父类中,父父类中...)
在APIView中的dispatch方法中先把原来request封装进去,变成新的request对象
接下来又执行了三个组件,分别是认证,权限和频率
如果三个中有一个不满足,则不继续执行
再走分发方法,最后返回response出去
即在请求进入视图函数前加了一些东西,重写了dispatch方法
dispatch方法:
传入的request是原生的request对象
这个request已经不是原生的request了,但是它内部有个原生的request对象
request = self.initialize_request(request, *args, **kwargs)
self.initial(request, *args, **kwargs)这里面有权限,认证,频率
来源:https://www.cnblogs.com/wanlei/p/10411833.html
0
投稿
猜你喜欢
- 简洁版Windows10系统下,按Win+R键启动运行,输入cmd,进入命令窗口输入conda info --envs,查看conda 环境
- SQL语句先前写的时候,很容易把一些特殊的用法忘记,我特此整理了一下SQL语句操作,方便自己写SQL时方便一点,想贴上来,一起看看,同时希望
- 抽象工厂模式(Abstract Factory Pattern):属于创建型模式,它提供了一种创建对象的最佳方式。在抽象工厂模式中,接口是负
- 1. 首先 进入cmd, 输入python,看python是否安装成功说明python安装,没有问题2. 修改注册表第一步window +
- 深入理解python try异常处理机制#python的try语句有两种风格#一:种是处理异常(try/except/else)#二:种是无
- 一、前言:当数据库服务器建立好以后,我们首先要做的不是考虑要在这个支持数据库的服务器运行哪些受MySQL提携的程序,而是当数据库遭到破坏后,
- composer是PHP中非常优秀的一个包管理工具,可以帮助我们来管理项目所需要依赖的所有包以及插件,也可以用来从packagist中创建一
- 关键路径计算是项目管理中关于进度管理的基本计算。 但是对于绝大多数同学来说, 关键路径计算都只是对一些简单情形的计算。今天,田老师根据以往的
- 判断函数如下:Public Function CheckBIG(strSource As String) As BooleanDim idx
- 本文实例讲述了Python实现对一个函数应用多个装饰器的方法。分享给大家供大家参考,具体如下:下面的例子展示了对一个函数应用多个装饰器,可以
- 网页编程中,在与数据库打交道的时候我们经常会碰到乱码的经常。本文就将介绍一种ASP读取MySQL数据库出现乱码的解决办法。情景再现:使用My
- 假设我们需要从各种网页中提取全文,并且要剥离所有HTML标记。通常,默认解决方案是使用BeautifulSoup软件包中的get_text方
- 今天在开发一个手机短信通讯录的前端界面时,界面中使用了checkbox,来做为各项的选择控件,但是操作时,除了点差子。由于逻辑需要,需要预先
- Ajax的流行给用户体验带来了很大程序的提升,而“注册“这项做为互联网最常用到的功能也自然而然的成为Ajax最常光顾的地方,实时判断用户输入
- 函数的递归调用:是函数嵌套调用的一种特殊形式具体是指:在调用一个函数的过程中又直接或间接地调用到了本身# 直接调用本身def func():
- 问题:如何把具有相同字段的记录删除,只留下一条。 例如:表test里有id,name字段,如果有name相同的记录只留下一条,
- floor() 函数向下舍入为最接近的整数。语法floor(x)参数描述x必需。一个数。说明返回不大于 x 的下一个整数
- 如下所示:dic = dict()dic['a'] = 1dic['b'] = 2dic['c
- 技术背景GPU的加速技术在深度学习、量子计算领域都已经被广泛的应用。其适用的计算模型是小内存的密集型计算场景,如果计算的模型内存较大,则需要
- 本文实例讲述了Python读取一个目录下所有目录和文件的方法。分享给大家供大家参考,具体如下:这里介绍的是刚学python时的一个读取目录的