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操作MySQL简单实现方法
Jan 26 Python
python使用socket进行简单网络连接的方法
Apr 29 Python
python实现字典(dict)和字符串(string)的相互转换方法
Mar 01 Python
详解Python中如何写控制台进度条的整理
Mar 07 Python
Pandas:DataFrame对象的基础操作方法
Jun 07 Python
Python线程同步的实现代码
Oct 03 Python
python用post访问restful服务接口的方法
Dec 07 Python
python3实现指定目录下文件sha256及文件大小统计
Feb 25 Python
python环境路径配置以及命令行运行脚本
Apr 02 Python
python实现美团订单推送到测试环境,提供便利操作示例
Aug 09 Python
通过 Django Pagination 实现简单分页功能
Nov 11 Python
Python unittest单元测试框架及断言方法
Apr 15 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 文件编程综合案例-文件上传的实现
2013/07/03 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
2019/12/18 PHP
javascript实现仿银行密码输入框效果的代码
2007/12/13 Javascript
prototype 中文参数乱码解决方案
2009/11/09 Javascript
javascript 折半查找字符在数组中的位置(有序列表)
2010/12/09 Javascript
jQuery结合PHP+MySQL实现二级联动下拉列表[实例]
2011/11/15 Javascript
js过滤HTML标签以及空格的思路及代码
2013/05/24 Javascript
原生JS实现LOADING效果
2015/03/16 Javascript
jquery实现适用于门户站的导航下拉菜单效果代码
2015/08/24 Javascript
jQuery插件fullPage.js实现全屏滚动效果
2016/12/02 Javascript
React-Native之定时器Timer的实现代码
2017/10/04 Javascript
mui上拉加载更多下拉刷新数据的封装过程
2017/11/03 Javascript
js实现简单的日历显示效果函数示例
2019/11/25 Javascript
JS面向对象之单选框实现
2020/01/17 Javascript
[00:47]DOTA2荣耀之路6:玩不了啦!
2018/05/30 DOTA
Python中的并发编程实例
2014/07/07 Python
深入理解Python变量与常量
2016/06/02 Python
python OpenCV学习笔记直方图反向投影的实现
2018/02/07 Python
python获取酷狗音乐top500的下载地址 MP3格式
2018/04/17 Python
Django stark组件使用及原理详解
2019/08/22 Python
python中class的定义及使用教程
2019/09/18 Python
Python算法中的时间复杂度问题
2019/11/19 Python
基于matplotlib xticks用法详解
2020/04/16 Python
python实现音乐播放和下载小程序功能
2020/04/26 Python
Python APScheduler执行使用方法详解
2020/12/10 Python
美国开幕式潮店:Opening Ceremony
2018/02/10 全球购物
DBA的职责都有哪些
2012/05/16 面试题
岗位职责的含义
2013/11/17 职场文书
应届毕业生如何写求职信
2014/02/16 职场文书
大学生推广普通话演讲稿
2014/09/21 职场文书
2014年教师学期工作总结
2014/11/08 职场文书
教代会闭幕词
2015/01/28 职场文书
小学生安全保证书
2015/05/09 职场文书
主持稿开场白
2015/06/01 职场文书
记者节感言
2015/08/03 职场文书
2019年新郎保证书3篇
2019/10/17 职场文书