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列表去重的二种方法
Feb 14 Python
在Python中使用Mako模版库的简单教程
Apr 08 Python
Python实现的飞速中文网小说下载脚本
Apr 23 Python
在Lighttpd服务器中运行Django应用的方法
Jul 22 Python
详解python OpenCV学习笔记之直方图均衡化
Feb 08 Python
Python面向对象之类的内置attr属性示例
Dec 14 Python
django框架自定义模板标签(template tag)操作示例
Jun 24 Python
Python使用python-docx读写word文档
Aug 26 Python
Django使用uwsgi部署时的配置以及django日志文件的处理方法
Aug 30 Python
pytorch 指定gpu训练与多gpu并行训练示例
Dec 31 Python
Python数据分析库pandas高级接口dt的使用详解
Dec 11 Python
用python获取txt文件中关键字的数量
Dec 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 var关键字相关原理及使用实例解析
2020/07/11 PHP
CheckBox 如何实现全选?
2006/06/23 Javascript
jquery 锁定弹出层实现代码
2010/02/23 Javascript
uploadify 3.0 详细使用说明
2012/06/18 Javascript
jquery获得keycode的示例代码
2013/12/30 Javascript
jquery做的一个简单的屏幕锁定提示框
2014/03/26 Javascript
基于jQuery的图片不完全按比例自动缩小
2014/07/11 Javascript
js数组的基本操作(很全自己整理的)
2014/10/16 Javascript
JavaScript中使用typeof运算符需要注意的几个坑
2014/11/08 Javascript
获取JS中网页各种高宽与位置的方法总结
2016/07/27 Javascript
js 函数式编程学习笔记
2017/03/25 Javascript
vue的mixins属性详解
2018/03/14 Javascript
JavaScript+H5实现微信摇一摇功能
2018/05/23 Javascript
JavaScript中call和apply方法的区别实例分析
2018/08/03 Javascript
NodeJs操作MongoDB教程之分页功能以及常见问题
2019/04/09 NodeJs
JS实现网页烟花动画效果
2020/03/10 Javascript
微信小程序实现组件顶端固定或底端固定效果(不随滚动而滚动)
2020/04/09 Javascript
基于Python实现定时自动给微信好友发送天气预报
2018/10/25 Python
python 通过麦克风录音 生成wav文件的方法
2019/01/09 Python
Python实现的统计文章单词次数功能示例
2019/07/08 Python
使用python turtle画高达
2020/01/19 Python
详解Python 实现 ZeroMQ 的三种基本工作模式
2020/03/24 Python
python算的上脚本语言吗
2020/06/22 Python
Python 将代码转换为可执行文件脱离python环境运行(步骤详解)
2021/01/25 Python
python读取excel数据并且画图的实现示例
2021/02/08 Python
纯css3实现照片墙效果
2014/12/26 HTML / CSS
html5 http的轮询和Websocket原理
2018/10/19 HTML / CSS
德国香水、化妆品和护理产品网上商店:Parfumdreams
2018/09/26 全球购物
英国美发和美容产品商城:HQhair
2019/02/08 全球购物
戴尔马来西亚官网:Dell Malaysia
2020/05/02 全球购物
MyBag中文网:英国著名的时尚包袋电商零售网站
2020/07/31 全球购物
一套.net面试题及答案
2016/11/02 面试题
为什么要用EJB
2014/04/17 面试题
培训演讲稿范文
2014/01/12 职场文书
收入证明怎么写
2015/06/12 职场文书
Go Gin实现文件上传下载的示例代码
2021/04/02 Golang