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删除nginx缓存文件示例(python文件操作)
Mar 26 Python
Python的collections模块中namedtuple结构使用示例
Jul 07 Python
如何在Python函数执行前后增加额外的行为
Oct 20 Python
在Python的一段程序中如何使用多次事件循环详解
Sep 07 Python
python向已存在的excel中新增表,不覆盖原数据的实例
May 02 Python
Python常用字符串替换函数strip、replace及sub用法示例
May 21 Python
Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】
Oct 12 Python
利用 PyCharm 实现本地代码和远端的实时同步功能
Mar 23 Python
设置jupyter中DataFrame的显示限制方式
Apr 12 Python
python中round函数如何使用
Jun 19 Python
Python使用OpenPyXL处理Excel表格
Jul 02 Python
深入浅析python3 依赖倒置原则(示例代码)
Jul 09 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(7) php 字符串相关应用
2010/03/05 PHP
php强制更新图片缓存的方法
2015/02/11 PHP
关于PHP开发的9条建议
2015/07/27 PHP
PHP实现的线索二叉树及二叉树遍历方法详解
2016/04/25 PHP
php 中phar包的使用教程详解
2018/10/26 PHP
ThinkPHP框架整合微信支付之JSAPI模式图文详解
2019/04/09 PHP
js 加载并解析XML字符串的代码
2009/12/13 Javascript
探析浏览器执行JavaScript脚本加载与代码执行顺序
2016/01/12 Javascript
JavaScript实现简洁的俄罗斯方块完整实例
2016/03/01 Javascript
Node.js  事件循环详解及实例
2017/08/06 Javascript
javascript数组定义的几种方法
2017/10/06 Javascript
微信小程序显示下拉列表功能【附源码下载】
2017/12/12 Javascript
vue 本地服务不能被外部IP访问的完美解决方法
2018/10/29 Javascript
Vue路由切换页面不更新问题解决方案
2020/07/10 Javascript
[52:05]EG vs OG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
python sqlobject(mysql)中文乱码解决方法
2008/11/14 Python
Python实现数通设备端口使用情况监控实例
2015/07/15 Python
python编写暴力破解zip文档程序的实例讲解
2018/04/24 Python
Flask框架实现给视图函数增加装饰器操作示例
2018/07/16 Python
Python-while 计算100以内奇数和的方法
2019/06/11 Python
python中web框架的自定义创建
2019/09/08 Python
使用python的turtle函数绘制一个滑稽表情
2020/02/28 Python
Django-rest-framework中过滤器的定制实例
2020/04/01 Python
python 图像插值 最近邻、双线性、双三次实例
2020/07/05 Python
美国百年历史早餐食品供应商:Wolferman’s
2017/01/18 全球购物
匡威英国官网:Converse英国
2018/12/02 全球购物
儿子婚宴答谢词
2014/01/09 职场文书
社团文化节策划书
2014/02/01 职场文书
电脑售后服务承诺书
2014/03/27 职场文书
单位活动策划方案
2014/08/17 职场文书
法定代表人身份证明书
2014/09/10 职场文书
房产授权委托书范本
2014/09/22 职场文书
小学语文教师年度考核个人总结
2015/02/05 职场文书
四风之害观后感
2015/06/09 职场文书
求职信:求职应该注意的问题
2019/04/24 职场文书
(开源)微信小程序+mqtt,esp8266温湿度读取
2021/04/02 Javascript