Django DRF APIView源码运行流程详解


Posted in Python onAugust 17, 2020

首先写一个简单的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的方法中:

Django DRF APIView源码运行流程详解

Django DRF APIView源码运行流程详解

查找dispatch方法:

Django DRF APIView源码运行流程详解

如果自己所定义的class DrfTest(APIView)没有手撸dispatch的情况下,下一步,找到APIView里的dispatch方法:

Django DRF APIView源码运行流程详解

当中有一个self.initial(request, *args, **kwargs)方法:

Django DRF APIView源码运行流程详解

至此,简单分析如上:回到最开始定义类的过程:

Django DRF APIView源码运行流程详解

流程总结

  • 请求来了,执行了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)这里面有权限,认证,频率

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 自动安装 Rising 杀毒软件
Apr 24 Python
python返回昨天日期的方法
May 13 Python
浅谈Python基础之I/O模型
May 11 Python
Python编程flask使用页面模版的方法
Dec 28 Python
python 中如何获取列表的索引
Jul 02 Python
python过滤中英文标点符号的实例代码
Jul 15 Python
如何基于Python获取图片的物理尺寸
Nov 25 Python
python实现打砖块游戏
Feb 25 Python
Python如何实现机器人聊天
Sep 10 Python
Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
Jan 27 Python
Python 如何解决稀疏矩阵运算
May 26 Python
Python开发工具Pycharm的安装以及使用步骤总结
Jun 24 Python
Django CBV模型源码运行流程详解
Aug 17 #Python
无惧面试,带你搞懂python 装饰器
Aug 17 #Python
Python Request类源码实现方法及原理解析
Aug 17 #Python
浅谈Python 钉钉报警必备知识系统讲解
Aug 17 #Python
Python钉钉报警及Zabbix集成钉钉报警的示例代码
Aug 17 #Python
Django DRF认证组件流程实现原理详解
Aug 17 #Python
python使用建议与技巧分享(二)
Aug 17 #Python
You might like
PHP与SQL注入攻击防范小技巧
2011/09/16 PHP
详解在YII2框架中使用UEditor编辑器发布文章
2018/11/02 PHP
javascript 继承实现方法
2009/08/26 Javascript
jquery 圆形旋转图片滚动切换效果
2011/01/19 Javascript
js中设置元素class的三种方法小结
2011/08/28 Javascript
js 单击式的下拉菜单效果实例
2013/08/13 Javascript
html的DOM中document对象images集合用法实例
2015/01/21 Javascript
Javascript中的匿名函数与封装介绍
2015/03/15 Javascript
javascript操作Cookie(设置、读取、删除)方法详解
2015/03/18 Javascript
JSONP之我见
2015/03/24 Javascript
jquery实现在网页指定区域显示自定义右键菜单效果
2015/08/25 Javascript
js jquery获取当前元素的兄弟级 上一个 下一个元素
2015/09/01 Javascript
解决JS组件bootstrap table分页实现过程中遇到的问题
2016/04/21 Javascript
javascript对象的相关操作小结
2016/05/16 Javascript
简单实现node.js图片上传
2016/12/18 Javascript
浅谈Node.js轻量级Web框架Express4.x使用指南
2017/05/03 Javascript
JavaScript实现HTML5游戏断线自动重连的方法
2017/09/18 Javascript
react学习笔记之state以及setState的使用
2017/12/07 Javascript
在vue里面设置全局变量或数据的方法
2018/03/09 Javascript
Python Sqlite3以字典形式返回查询结果的实现方法
2016/10/03 Python
python中利用Future对象回调别的函数示例代码
2017/09/07 Python
深度辨析Python的eval()与exec()的方法
2019/03/26 Python
python如何爬取网站数据并进行数据可视化
2019/07/08 Python
Python实现TCP探测目标服务路由轨迹的原理与方法详解
2019/09/04 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
2020/07/14 Python
Python 虚拟环境工作原理解析
2020/12/24 Python
解决python的空格和tab混淆而报错的问题
2021/02/26 Python
英国床垫在线:Mattress Online
2016/12/07 全球购物
超级搞笑检讨书
2014/01/15 职场文书
人力资源经理的岗位职责范本
2014/02/28 职场文书
艺术设计专业毕业生推荐信
2014/07/08 职场文书
励志演讲稿3分钟
2014/08/21 职场文书
英文商务邀请函范文
2015/01/31 职场文书
2015年三八妇女节活动总结
2015/02/06 职场文书
详解TypeScript中的类型保护
2021/04/29 Javascript
Python 的 sum() Pythonic 的求和方法详细
2021/10/16 Python