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学习 流程控制语句详解
Jun 01 Python
python 实现敏感词过滤的方法
Jan 21 Python
pandas分区间,算频率的实例
Jul 04 Python
python实现大文件分割与合并
Jul 22 Python
Python中变量的输入输出实例代码详解
Jul 28 Python
树莓派安装OpenCV3完整过程的实现
Oct 10 Python
python 实现二维字典的键值合并等函数
Dec 06 Python
python实现ftp文件传输功能
Mar 20 Python
django表单中的按钮获取数据的实例分析
Jul 31 Python
Pyinstaller打包Scrapy项目的实现步骤
Sep 22 Python
Python爬虫之Selenium设置元素等待的方法
Dec 04 Python
Python包argparse模块常用方法
Jun 04 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自动适应范围的分页代码
2008/08/05 PHP
php以fastCGI的方式运行时文件系统权限问题及解决方法
2015/05/11 PHP
利用PHP判断文件是否为图片的方法总结
2017/01/06 PHP
Aster vs Newbee BO5 第一场2.19
2021/03/10 DOTA
Grid得到选择行数据的方法总结
2011/01/17 Javascript
js中AppendChild与insertBefore的用法详细解析
2013/12/16 Javascript
情人节单身的我是如何在敲完代码之后收到12束玫瑰的(javascript)
2015/08/21 Javascript
javascript实现很浪漫的气泡冒出特效
2020/09/05 Javascript
JS简单编号生成器实现方法(附demo源码下载)
2016/04/05 Javascript
jQuery插件zTree实现获取当前选中节点在同级节点中序号的方法
2017/03/08 Javascript
jquery点赞功能实现代码 点个赞吧!
2020/05/29 jQuery
微信小程序之发送短信倒计时功能
2017/08/30 Javascript
JS基于正则表达式实现的密码强度验证功能示例
2017/09/21 Javascript
用Python创建声明性迷你语言的教程
2015/04/13 Python
详解Python中for循环的使用
2015/04/14 Python
利用Python实现颜色色值转换的小工具
2016/10/27 Python
基于python生成器封装的协程类
2019/03/20 Python
python实现字符串加密 生成唯一固定长度字符串
2019/03/22 Python
18-35岁旅游团的全球领导者:Contiki
2017/02/08 全球购物
美国折扣网站:jClub
2017/08/07 全球购物
给排水专业应届生求职信
2013/10/12 职场文书
计算机专业大学生的自我评价
2013/11/14 职场文书
销售工作岗位职责
2013/12/24 职场文书
工业学校毕业生自荐书
2014/01/03 职场文书
节约电力资源的建议书
2014/03/12 职场文书
公安机关纪律作风整顿剖析
2014/10/10 职场文书
主持人开场白台词
2015/05/29 职场文书
心灵捕手观后感
2015/06/02 职场文书
养成教育工作总结
2015/08/13 职场文书
大学生活委员竞选稿
2015/11/21 职场文书
护士爱岗敬业心得体会
2016/01/25 职场文书
学校就业保障协议书
2019/06/24 职场文书
Golang: 内建容器的用法
2021/05/05 Golang
教你如何用Python实现人脸识别(含源代码)
2021/06/23 Python
Django实现WebSocket在线聊天室功能(channels库)
2021/09/25 Python
sql查询语句之平均分、最高最低分及排序语句
2022/05/30 MySQL