Django CBV模型源码运行流程详解


Posted in Python onAugust 17, 2020

在view文件中编写一个类,并配置好路由

class Test(View):
  def get(self, request, *args, **kwargs):
    return HttpResponse('cbv_get')

  def post(self, request, *args, **kwargs):
    return HttpResponse('cbv_post')

url(r'test/',views.Test.as_view()),

通过as_view()进入查看源码

Django CBV模型源码运行流程详解

实际上views.Test.as_view()是存的一个内存地址,加括号被调用,执行了as_view方法里的view方法,具体看下图:

Django CBV模型源码运行流程详解

核心是dispatch方法,在dispatch方法中完成了分发功能。

Django CBV模型源码运行流程详解

若要在Test类中自定义dispatch方法,代码如下:

class Test(View):
  def dispatch(self, request, *args, **kwargs):
    # 加代码
    obj = super().dispatch(self, request, *args, **kwargs)
    # 加代码
    # 实现了一个类似装饰器的效果,比如post请求,如果是json,手动从request里body取出来 再转一下
    # 或者走的时候加点cookie
    return obj
  
  def get(self, request, *args, **kwargs):
    return HttpResponse('cbv_get')

  def post(self, request, *args, **kwargs):
    return HttpResponse('cbv_post')

流程总结:

CBV模型

  • 在views中写一个类,继承View,里面写get方法,post方法
  • 在路由中配置: url(r'^test/', views.Test.as_view()),实际上第二个参数位置,放的还是一个函数内存地址
  • 当请求来了,就会执行第二个参数(request,参数),本质上执行view()
  • view内部调用了dispatch()方法
  • dispatch分发方法,根据请求方式不同,执行的方法不同

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

Python 相关文章推荐
Python Mysql自动备份脚本
Jul 14 Python
python写入中英文字符串到文件的方法
May 06 Python
Python语言描述机器学习之Logistic回归算法
Dec 21 Python
实例讲解Python中整数的最大值输出
Mar 17 Python
Python字符串匹配之6种方法的使用详解
Apr 08 Python
程序员的七夕用30行代码让Python化身表白神器
Aug 07 Python
Python模块future用法原理详解
Jan 20 Python
python 一维二维插值实例
Apr 22 Python
在Keras中利用np.random.shuffle()打乱数据集实例
Jun 15 Python
python 日志模块logging的使用场景及示例
Jan 04 Python
基于Python-turtle库绘制路飞的草帽骷髅旗、美国队长的盾牌、高达的源码
Feb 18 Python
基于Python实现nc批量转tif格式
Aug 14 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
详解python方法之绑定方法与非绑定方法
Aug 17 #Python
You might like
php日历[测试通过]
2008/03/27 PHP
php smarty模版引擎中变量操作符及使用方法
2009/12/11 PHP
PHP使用token防止表单重复提交的方法
2016/04/07 PHP
php模仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(中)
2017/06/11 PHP
PHP的mysqli_rollback()函数讲解
2019/01/23 PHP
TP5.0框架实现无限极回复功能的方法分析
2019/05/04 PHP
ASP.NET jQuery 实例11 通过使用jQuery validation插件简单实现用户登录页面验证功能
2012/02/03 Javascript
基于JQuery实现鼠标点击文本框显示隐藏提示文本
2012/02/23 Javascript
jQuery实现鼠标划过添加和删除class的方法
2015/06/26 Javascript
jQuery实现的导航下拉菜单效果示例
2016/09/05 Javascript
Vue.js每天必学之指令系统与自定义指令
2016/09/07 Javascript
jQuery与JavaScript节点创建方法的对比
2016/11/18 Javascript
React Router v4 入坑指南(小结)
2018/04/08 Javascript
select2 ajax 设置默认值,初始值的方法
2018/08/09 Javascript
浅谈Vue.js 中的 v-on 事件指令的使用
2018/11/25 Javascript
小程序api实现promise封装过程解析
2019/11/21 Javascript
[39:32]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第二场
2014/05/23 DOTA
Python对象的深拷贝和浅拷贝详解
2014/08/25 Python
Python中表达式x += y和x = x+y 的区别详解
2017/06/20 Python
python 2.7.14安装图文教程
2018/04/08 Python
查看Django和flask版本的方法
2018/05/14 Python
django_orm查询性能优化方法
2018/08/20 Python
Python生成器的使用方法和示例代码
2019/03/04 Python
python中的RSA加密与解密实例解析
2019/11/18 Python
tensorflow模型保存、加载之变量重命名实例
2020/01/21 Python
Python rabbitMQ如何实现生产消费者模式
2020/08/24 Python
python利用pytesseract 实现本地识别图片文字
2020/12/14 Python
澳大利亚拥有最好的家具和家居用品在线目的地:Nestz
2019/02/23 全球购物
英国在线玫瑰专家:InterRose
2019/12/01 全球购物
成龙洗发水广告词
2014/03/14 职场文书
大学学雷锋活动总结
2014/06/26 职场文书
武夷山导游词
2015/02/03 职场文书
幼儿园大班教师随笔
2015/08/14 职场文书
会议承办单位欢迎词
2015/09/30 职场文书
Vue监视数据的原理详解
2022/02/24 Vue.js
我去timi了,一起去timi是什么意思?
2022/04/13 杂记