详解Django中CBV(Class Base Views)模型源码分析


Posted in Python onFebruary 25, 2019

在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(Class Base Views)模型源码分析

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

详解Django中CBV(Class Base Views)模型源码分析

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

详解Django中CBV(Class Base Views)模型源码分析

若要在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二分查找详解
Sep 13 Python
python flask实现分页效果
Jun 27 Python
Python实现线程状态监测简单示例
Mar 28 Python
python中pylint使用方法(pylint代码检查)
Apr 06 Python
python实现批量修改图片格式和尺寸
Jun 07 Python
为什么str(float)在Python 3中比Python 2返回更多的数字
Oct 16 Python
Django使用redis缓存服务器的实现代码示例
Apr 28 Python
Python中文分词库jieba,pkusegwg性能准确度比较
Feb 11 Python
Pytorch对Himmelblau函数的优化详解
Feb 29 Python
Python scrapy爬取小说代码案例详解
Jul 09 Python
python查询MySQL将数据写入Excel
Oct 29 Python
python中用Scrapy实现定时爬虫的实例讲解
Jan 18 Python
Python判断对象是否相等及eq函数的讲解
Feb 25 #Python
详解django中url路由配置及渲染方式
Feb 25 #Python
利用python脚本如何简化jar操作命令
Feb 24 #Python
Python中如何使用if语句处理列表实例代码
Feb 24 #Python
python实现两张图片的像素融合
Feb 23 #Python
Python判断有效的数独算法示例
Feb 23 #Python
Python实现的旋转数组功能算法示例
Feb 23 #Python
You might like
Discuz 6.0+ 批量注册用户名
2009/09/13 PHP
深入理解require与require_once与include以及include_once的区别
2013/06/05 PHP
PHP中Header使用的HTTP协议及常用方法小结
2014/11/04 PHP
PHP中file_exists()判断中文文件名无效的解决方法
2014/11/12 PHP
Zend Framework创建自己的动作助手详解
2016/03/05 PHP
根据一段代码浅谈Javascript闭包
2010/12/14 Javascript
JS、CSS加载中的小问题探讨
2013/11/26 Javascript
JQuery中$.ajax()方法参数详解及应用
2013/12/12 Javascript
js时间比较示例分享(日期比较)
2014/03/05 Javascript
jQuery实现自动与手动切换的滚动新闻特效代码分享
2015/08/27 Javascript
基于jQuery通过jQuery.form.js插件实现异步上传
2015/12/13 Javascript
Jsonp 关键字详解及json和jsonp的区别,ajax和jsonp的区别
2015/12/30 Javascript
详解Javascript中的Object对象
2016/02/28 Javascript
AngularJS中的API(接口)简单实现
2016/07/28 Javascript
Bootstrap Table 搜索框和查询功能
2017/11/30 Javascript
nodejs基础之常用工具模块util用法分析
2018/12/26 NodeJs
详解Vue.js和layui日期控件冲突问题解决办法
2019/07/25 Javascript
小程序跨页面交互的作用与方法详解
2020/01/07 Javascript
JS函数进阶之继承用法实例分析
2020/01/15 Javascript
javascript自定义加载loading效果
2020/09/15 Javascript
rabbitmq(中间消息代理)在python中的使用详解
2017/12/14 Python
Anaconda2 5.2.0安装使用图文教程
2018/09/19 Python
Django实现跨域请求过程详解
2019/07/25 Python
Python 中的 global 标识对变量作用域的影响
2019/08/12 Python
python 内置函数汇总详解
2019/09/16 Python
使用apiDoc实现python接口文档编写
2019/11/19 Python
ansible动态Inventory主机清单配置遇到的坑
2020/01/19 Python
python获取响应某个字段值的3种实现方法
2020/04/30 Python
15款Python编辑器的优缺点,别再问我“选什么编辑器”啦
2020/10/19 Python
Django利用elasticsearch(搜索引擎)实现搜索功能
2020/11/26 Python
class类在python中获取金融数据的实例方法
2020/12/10 Python
详解CSS3开启硬件加速的使用和坑
2017/08/21 HTML / CSS
CSS3 实现footer 固定在底部(无论页面多高始终在底部)
2019/10/15 HTML / CSS
八年级美术教学反思
2014/02/02 职场文书
2014年科协工作总结
2014/12/09 职场文书
POST提交数据常见的四种方式
2022/01/18 HTML / CSS