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 相关文章推荐
wxpython 学习笔记 第一天
Mar 16 Python
Python通过websocket与js客户端通信示例分析
Jun 25 Python
在Python的web框架中中编写日志列表的教程
Apr 30 Python
利用Python如何制作好玩的GIF动图详解
Jul 11 Python
Python实现将Excel转换成xml的方法示例
Aug 25 Python
详解Python requests 超时和重试的方法
Dec 18 Python
python实现kmp算法的实例代码
Apr 03 Python
Python实现平行坐标图的绘制(plotly)方式
Nov 22 Python
Python 解决OPEN读文件报错 ,路径以及r的问题
Dec 19 Python
在PyTorch中使用标签平滑正则化的问题
Apr 03 Python
tensorflow安装成功import tensorflow 出现问题
Apr 16 Python
python 视频下载神器(you-get)的具体使用
Jan 06 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
《魔兽争霸3》重制版究竟重制了什么?玩家:这么糊弄真的好吗?
2020/05/04 魔兽争霸
php中使用Akismet防止垃圾评论的代码
2011/06/10 PHP
Zend Framework中的简单工厂模式 图文
2012/07/10 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十)
2014/06/24 PHP
PHP使用静态方法的几个注意事项
2014/09/16 PHP
jQuery获取字符串中出现最多的数
2016/02/22 Javascript
JS实现的打字机效果完整实例
2016/06/20 Javascript
Vue组件之极简的地址选择器的实现
2018/05/31 Javascript
layer.prompt使文本框为空的情况下也能点击确定的方法
2019/09/24 Javascript
vant-ui框架的一个bug(解决切换后onload不触发)
2020/11/11 Javascript
Python单体模式的几种常见实现方法详解
2017/07/28 Python
pytorch构建网络模型的4种方法
2018/04/13 Python
padas 生成excel 增加sheet表的实例
2018/12/11 Python
python安装pil库方法及代码
2019/06/25 Python
解决Python3 抓取微信账单信息问题
2019/07/19 Python
Django框架基础模板标签与filter使用方法详解
2019/07/23 Python
PHP统计代码行数的小代码
2019/09/19 Python
Python使用贪婪算法解决问题
2019/10/22 Python
Python操作redis和mongoDB的方法
2019/12/19 Python
Python3.x+迅雷x 自动下载高分电影的实现方法
2020/01/12 Python
python实现程序重启和系统重启方式
2020/04/16 Python
python利用蒙版抠图(使用PIL.Image和cv2)输出透明背景图
2020/08/04 Python
python/golang 删除链表中的元素
2020/09/14 Python
利用Python函数实现一个万历表完整示例
2021/01/23 Python
临床医师专业个人自我评价范文
2013/11/07 职场文书
迟到检讨书5000字
2014/01/31 职场文书
班组建设经验交流材料
2014/05/12 职场文书
园林专业毕业生自荐信
2014/07/04 职场文书
领导班子三严三实对照检查材料
2014/09/25 职场文书
在教室放鞭炮的检讨书
2014/09/28 职场文书
2014酒店客房部工作总结
2014/12/16 职场文书
2016年优秀共产党员先进事迹材料
2016/02/29 职场文书
传单、海报早OUT了,另类传单营销方案送给你!
2019/07/15 职场文书
励志正能量20句:送给所有为梦想拼搏的人
2019/11/11 职场文书
pytorch 使用半精度模型部署的操作
2021/05/24 Python
「回转企鹅罐」10周年纪念展「輪るピングドラム展」海报公开
2022/03/22 日漫