详解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命令行参数sys.argv使用示例
Jan 28 Python
Python Socket实现简单TCP Server/client功能示例
Aug 05 Python
使用Python的package机制如何简化utils包设计详解
Dec 11 Python
python读取中文txt文本的方法
Apr 12 Python
一行代码让 Python 的运行速度提高100倍
Oct 08 Python
python如何以表格形式打印输出的方法示例
Jun 21 Python
用Cython加速Python到“起飞”(推荐)
Aug 01 Python
python 实现图片上传接口开发 并生成可以访问的图片url
Dec 18 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
Jan 04 Python
Python爬虫库requests获取响应内容、响应状态码、响应头
Jan 25 Python
python实现超级玛丽游戏
Mar 18 Python
python中的class_static的@classmethod的巧妙用法
Jun 22 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
php操作JSON格式数据的实现代码
2011/12/24 PHP
php网站判断用户是否是手机访问的方法
2013/11/01 PHP
php数组中包含中文的排序方法
2014/06/03 PHP
thinkphp修改配置进入默认首页的方法
2017/02/07 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
javascript下string.format函数补充
2010/08/24 Javascript
javascript权威指南 学习笔记之null和undefined
2011/09/25 Javascript
jQuery 获取和设置select下拉框的值实现代码
2013/11/08 Javascript
jquery基础教程之数组使用详解
2014/03/10 Javascript
JavaScript中常用的六种互动方法示例
2015/03/13 Javascript
AngularJS 所有版本下载地址
2016/09/14 Javascript
Vue.js教程之计算属性
2016/11/11 Javascript
JavaScript实现打印星型金字塔功能实例分析
2017/09/27 Javascript
Vue实现点击显示不同图片的效果
2019/08/10 Javascript
jquery 遍历hash操作示例【基于ajax交互】
2019/10/12 jQuery
微信小程序实现时间戳格式转换
2020/07/20 Javascript
[01:58]2018DOTA2亚洲邀请赛趣味视频——交流
2018/04/03 DOTA
基于Python实现的百度贴吧网络爬虫实例
2015/04/17 Python
python3音乐播放器简单实现代码
2020/04/20 Python
解决python3在anaconda下安装caffe失败的问题
2017/06/15 Python
Python基于sklearn库的分类算法简单应用示例
2018/07/09 Python
使用Py2Exe for Python3创建自己的exe程序示例
2018/10/31 Python
Python HTML解析器BeautifulSoup用法实例详解【爬虫解析器】
2019/04/05 Python
python实现画图工具
2020/08/27 Python
python基本算法之实现归并排序(Merge sort)
2020/09/01 Python
python调用百度AI接口实现人流量统计
2021/02/03 Python
html5指南-3.如何实现html元素拖拽功能
2013/01/07 HTML / CSS
应届生法律顾问求职信
2013/11/19 职场文书
费用会计岗位职责
2014/01/01 职场文书
学前班评语大全
2014/05/04 职场文书
环保建议书100字
2014/05/14 职场文书
2014年连锁店圣诞节活动方案
2014/12/09 职场文书
国庆节新闻稿
2015/07/17 职场文书
幼儿园小朋友毕业感言
2015/07/30 职场文书
导游词之山东八仙过海景区
2019/11/11 职场文书
如何Tomcat中使用ipv6地址
2022/05/06 Servers