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 相关文章推荐
使用IronPython把Python脚本集成到.NET程序中的教程
Mar 31 Python
利用Python获取赶集网招聘信息前篇
Apr 18 Python
使用Python设计一个代码统计工具
Apr 04 Python
使用Python来开发微信功能
Jun 13 Python
Python实现基于KNN算法的笔迹识别功能详解
Jul 09 Python
django进阶之cookie和session的使用示例
Aug 17 Python
Python后台开发Django的教程详解(启动)
Apr 08 Python
python获取点击的坐标画图形的方法
Jul 09 Python
python 函数中的参数类型
Feb 11 Python
Python + selenium + crontab实现每日定时自动打卡功能
Mar 31 Python
Python Request类源码实现方法及原理解析
Aug 17 Python
通过代码实例解析Pytest运行流程
Aug 20 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中的常用函数回顾
2013/07/11 PHP
php提取字符串中网站url地址的方法
2014/12/03 PHP
PHP请求Socket接口测试实例
2016/08/12 PHP
php通过PHPExcel导入Excel表格到MySQL数据库的简单实例
2016/10/29 PHP
PHP实现判断数组是一维、二维或几维的方法
2017/02/06 PHP
JSON 学习之完全手册 图文
2007/05/29 Javascript
javascript-TreeView父子联动效果保持节点状态一致
2007/08/12 Javascript
页面加载完成后再执行JS的jquery写法以及区别说明
2014/02/22 Javascript
一张Web前端的思维导图分享
2015/07/03 Javascript
微信小程序(应用号)简单实例应用及实例详解
2016/09/26 Javascript
实例详解ztree在vue项目中使用并且带有搜索功能
2018/08/24 Javascript
JS函数内部属性之arguments和this实例解析
2018/10/07 Javascript
微信小程序自定义弹窗滚动与页面滚动冲突的解决方法
2019/07/16 Javascript
JavaScript装饰者模式原理与用法实例详解
2020/03/09 Javascript
解决elementui表格操作列自适应列宽
2020/12/28 Javascript
Python编程实现二分法和牛顿迭代法求平方根代码
2017/12/04 Python
Python生成器定义与简单用法实例分析
2018/04/30 Python
使用python将请求的requests headers参数格式化方法
2019/01/02 Python
Python中extend和append的区别讲解
2019/01/24 Python
详解Python安装tesserocr遇到的各种问题及解决办法
2019/03/07 Python
Python3+Appium实现多台移动设备操作的方法
2019/07/05 Python
Django认证系统实现的web页面实现代码
2019/08/12 Python
pandas read_excel()和to_excel()函数解析
2019/09/19 Python
Python json转字典字符方法实例解析
2020/04/13 Python
jupyter notebook 调用环境中的Keras或者pytorch教程
2020/04/14 Python
Python变量及数据类型用法原理汇总
2020/08/06 Python
FORZIERI澳大利亚站:全球顶级奢华配饰精品店
2016/12/31 全球购物
租租车:国际租车、美国租车、欧洲租车、特价预订国外租车(中文服务)
2018/03/28 全球购物
常用UNIX 命令(Linux的常用命令)
2013/07/10 面试题
学生自我评价范文
2014/02/02 职场文书
财务情况说明书范文
2014/05/06 职场文书
学生夜不归宿检讨书
2014/09/23 职场文书
入党政审材料范文
2014/12/24 职场文书
公司给客户的感谢信
2015/01/23 职场文书
党风廉正建设个人工作总结
2015/03/06 职场文书
雷锋的故事观后感
2015/06/10 职场文书