Django的CBV方式讲解
CBV使用配置
路径url的配置
cbv 顾名知义就是通过类的方法来调用,我们在url中配置为如下路径
url(r'^cbv.html/', views.Cbv.as_view()),
这里的Cbv是一个class 类,要想使用cbv方法,这个路径后面还得必须有一个as_view()这个是必须的固定格式
views里面函数的格式
在views里面配置类,需要导入一个模块
from django.views.generic import View #这个是导入的模块,原来的django版本从django.views 里面可以直接导入View,但是现在需要加一个generic才可以
class Cbv(View): #这里必须要继承View这个类,只有继承了这个url那里的as_view()才会有这个方法
def get(self,request):
return HttpResponse('cbv-get')
def post(self,request):
return HttpResponse('cbv-post')
浏览器get方式访问
创建一个login登陆页面测试post方法
views配置
from django.views.generic import View
class Cbv(View):
def get(self,request):
# return HttpResponse('cbv-get')
return render(request,'login.html') #发送到login.html
def post(self,request):
return HttpResponse('cbv-post')
login的页面配置代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>cbv学习</title>
</head>
<body>
<form action="/cbv.html/" method="post">
<input type="text" name="username">
<input type="submit" value="提交">
</form>
</body>
</html>
浏览器访问查看点击提交后的结果
点击提交
这里通过查看View的源码,可以看到里面会有很多种提交方法
http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']
使用ajax的时候这些方法都是可以使用的。
另外继承类不光有View,还有很多的,查看源码就可以看到的
我的django版本号是
C:\Users\Tony>python3 -m django --version
1.9.13
cbv匹配原理
这种更具url来匹配方法的是通过反射方法(getattr)来做的。请求过来后先走dispatch这个方法,这个方法存在View类中。
def dispatch(self, request, *args, **kwargs):
# Try to dispatch to the right method; if a method doesn't exist,
# defer to the error handler. Also defer to the error handler if the
# request method isn't on the approved list.
if request.method.lower() in self.http_method_names:
handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
else:
handler = self.http_method_not_allowed
return handler(request, *args, **kwargs)
定制dispatch
如果需要批量对方法,例如get,post等方法做一些操作的时候,这里我们可以手动写一个dispatch,这个dispatch就和装饰器的效果一样。因为请求来的时候总是先走的dispatch。
from django.views.generic import View
class Cbv(View):
def dispatch(self, request, *args, **kwargs):
print('操作前的操作')
obj = super(Cbv,self).dispatch(request, *args, **kwargs)
print('操作后的操作代码')
return obj
def get(self,request):
# return HttpResponse('cbv-get')
return render(request,'login.html')
def post(self,request):
return HttpResponse('cbv-post')
这次我们在通过浏览器访问的时候,发现不管get或者post方法,都会走print代码,
Django的CBV方式讲解的更多相关文章
- django FBV +CBV 视图处理方式总结
1.FBV(function base views) 在视图里使用函数处理请求. url: re_path('fbv', views.fbv), # url(r'^fbv' ...
- Django的CBV和FBV
一.FBV FBV(function base views) 就是在视图里使用函数处理请求,也是我们最开始接触和使用的方式,普通项目中最常见的方式. urls.py 1 2 3 4 urlpatter ...
- Django中CBV的执行顺序之源码解析
浅析Django中的CBV的执行顺序 下图为CBV方式的执行顺序,大概执行流程如下: 其中浅蓝色为在假设自己写的类,即Test类中没有dispatch方法的情况下的执行顺序,当自己的类中有dispat ...
- Django的CBV与FBV
FBV FBV(function base views) 就是在视图里使用函数处理请求. 在之前django的学习中,我们一直使用的是这种方式,所以不再赘述. CBV CBV(class base v ...
- Django的 CBV和FBV
FBV CBV 回顾多重继承和Mixin 回到顶部 FBV FBV(function base views) 就是在视图里使用函数处理请求. 在之前django的学习中,我们一直使用的是这种方式,所以 ...
- Django 之 CBV & FBV
FBV FBV(function base views) 就是在视图里使用函数处理请求. 在之前django随笔中,一直使用的是这种方式,不再赘述. CBV CBV(class base views) ...
- Django之CBV和FBV
Django之CBV和FBV CBV和FBV是C和F的区别: C是Class,F是Function 在请求中,有GET请求和POST请求. 在写CBV时,url是可以对应一个类的,在类中,分别写出GE ...
- django中CBV
08.13自我总结 django中CBV 一.django处理业务逻辑的两种方式 FBV (function based views):使用函数来处理业务逻辑 CBV (class based vie ...
- django补充CBV和FBV模式
django补充CBV和FBV模式FBV模式---函数:经常用的方式CBV模式---类CBV中url连接时函数名后面要接.as_view()class index(views.View): @... ...
随机推荐
- PHP实现微信第三方登录的方法
本文实例讲述了PHP版微信第三方实现一键登录及获取用户信息的方法.分享给大家供大家参考,具体如下: 注意,要使用微信在第三方网页登录是需要“服务号”才可以哦,所以必须到官方申请 一开始你需要进入微信公 ...
- 常见的awk内建变量
FS: 输入字段分隔符变量 语法: $ awk -F 'FS' 'commands' inputfilename 或者 $ awk 'BEGIN{FS="FS";}' OFS: 输 ...
- Python中的列表(4)
1.遍历列表 如果想打印列表中的所有元素,则必须遍历列表. 可以使用for ... in ... 语句来遍历列表中的元素.遍历的意思 words = ['a','b','c','d'] for wor ...
- [bzoj1058][ZJOI2007][报表统计] (STL)
Description 小Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工 作,作为她的生日礼物之一.经过仔细观察,小Q发现统计一张报表实际上是维护一个 ...
- SQL Server 2016 CTP3.2 开荒 Reporting Service 篇
仅仅是开荒资源页,反正过不了多久就会有新的CTP. 下面是MSDN I Tell you 提供的 不过是中文,个人不是很建议,因为现在大多的资源页都是英文的ed2k://|file|cn_sql_se ...
- Python安装配置
Python下载 官网下载地址:https://www.python.org/downloads/windows/ 下载安装包: python-3.5.0-amd64(64位).exe python- ...
- jsp获取绝对路径----${pageContext.request.contextPath}
JSP取得绝对路径 在JavaWeb开发中,常使用绝对路径的方式来引入JavaScript和CSS文件,这样可以避免因为目录变动导致引入文件找不到的情况,常用的做法如下: 一.使用${pageCont ...
- Leetcode 179.最大数
最大数 给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数. 示例 1: 输入: [10,2] 输出: 210 示例 2: 输入: [3,30,34,5,9] 输出: 9534330 impo ...
- Frequent values(poj 3368)
题意:给出n个数和Q个询问(l,r),对于每个询问求出(l,r)之间连续出现次数最多的次数. 代码: /* rmq算法 当询问到x,y时,设在x之后并且与a[x]相同的最后一个数编号为t,那么x到t之 ...
- tyvj1031 热浪
背景 USACO OCT09 9TH 描述 德克萨斯纯朴的民眾们这个夏天正在遭受巨大的热浪!!!他们的德克萨斯长角牛吃起来不错,可是他们并不是很擅长生產富含奶油的乳製品.Farmer John此时以先 ...