博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django的CBV方式讲解
阅读量:6877 次
发布时间:2019-06-26

本文共 2265 字,大约阅读时间需要 7 分钟。

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方式访问

Django的CBV方式讲解

创建一个login登陆页面测试post方法

views配置
from django.views.generic import Viewclass 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的页面配置代码

    
cbv学习

浏览器访问查看点击提交后的结果

Django的CBV方式讲解

点击提交

Django的CBV方式讲解

这里通过查看View的源码,可以看到里面会有很多种提交方法

http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']
使用ajax的时候这些方法都是可以使用的。

另外继承类不光有View,还有很多的,查看源码就可以看到的

Django的CBV方式讲解

我的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 Viewclass 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方式讲解

转载于:https://blog.51cto.com/sgk2011/2061658

你可能感兴趣的文章
Linux常用命令——tr
查看>>
检测 ip 是否断开,并使用邮箱报警
查看>>
整理第一周学习C的知识点
查看>>
Spring Data JPA 实例查询
查看>>
ping多线程
查看>>
PMP每日一题
查看>>
python中struct.unpack的用法
查看>>
解决物理内存足够时VMware 提示物理内存不足。。。
查看>>
java socket常见异常
查看>>
Dubbo与Zookeeper、SpringMVC整合和使用
查看>>
Spring中的属性scope
查看>>
SpringApplication你不知道的那些事!
查看>>
为什么比别人办事效率慢?因为你没用这几款强大的搜索软件!
查看>>
linux菜鸟基础学习 (二) 中篇
查看>>
配置网络
查看>>
0021-使用JDBC向Kudu表插入中文字符-cast的秘密
查看>>
Kubernetes 1.14发布:对Windows节点的生产级支持、Kubectl更新与持久本地卷
查看>>
PHP获取未来七天的日期和星期
查看>>
web防火墙的开通和部署
查看>>
驰骋工作流引擎,表单引擎工作事务单元测试报告
查看>>