Django CBV类的用法详解


Posted in Python onJuly 26, 2019

前言

之前我们在路由匹配的时候,一个url对应一个函数,其实我们还可以一个url对应一个类,这个就是CBV,下面我们来简单的介绍一下CBV

一、CBV的基本用法

1、在路由匹配中要这样写,class_login是对应的类,as_view()是固定写法,必须要这么写,记住后面有个括号

url(r'^class_login/', views.class_login.as_view()),

2、在视图函数中导入一个模块

from django import views

3、在视图函数中写一个类,如果是get请求,则执行get方法,如果是post请求,则执行post方法

class class_login(views.View):
 # 1、如果是get请求,则执行get函数
 
  @method_decorator(outer)
  def get(self,request,*args,**kwargs):
    print(request.path)
    return HttpResponse("yyyyyy")
 
  # 2、如果是post请求,则执行post函数
  def post(self,request,*args,**kwargs):
    pass

4、post和get请求是最常见的,还有其他的方法,我们看下视图函数中继承的父类View中的方法,还支持如下这么多的方法

http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']

二、装饰器

上面基本的用法我们就已经介绍完了,如果要用装饰器,该怎么弄呢?

1、需要导入一个模块

from django.utils.decorators import method_decorator

2、然后定义一个装饰器

def outer(func):
  def inner(request,*args,**kwargs):
    print(request.method)
    rep = func(request,*args,**kwargs)
    return rep
  return inner

3、我们该如何把装饰器加的类中的,就需要用到我们第一步导入的模块了

3_1、为类中的一个函数添加装饰器,方法如下

@method_decorator(outer)
def get(self,request,*args,**kwargs):
  print(request.path)
  return HttpResponse("yyyyyy")

3_2、为类中的所有的方法添加装饰器,方法如下

@method_decorator(outer,name="dispatch")
class class_login(views.View):
 # 1、如果是get请求,则执行get函数
 
  # @method_decorator(outer)
  def get(self,request,*args,**kwargs):
    print(request.path)
    return HttpResponse("yyyyyy")
 
  # 2、如果是post请求,则执行post函数
  def post(self,request,*args,**kwargs):
    pass

dispatch就是django默认给我们定义的方法,在执行get或者post方法之前会执行的一个方法

4、子类如果想调用父类的方法,有两种方法来实现

class login(views.View):
  def dispatch(self, request, *args, **kwargs):
 
    # 调用父类的dispatch方法的两种方法
    # 方式1
    super(login,self).dispatch(request,*args,**kwargs)
 
    # 方式2
    super().dispatch(request, *args, **kwargs)
 
    return HttpResponse("ok")
  def get(self,request):
    return HttpResponse("get")
 
  def post(self,rquest):
    return HttpResponse("post")

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python跨文件全局变量的实现方法示例
Dec 10 Python
PyCharm的设置方法和第一个Python程序的建立
Jan 16 Python
基于Python打造账号共享浏览器功能
May 30 Python
python调用摄像头拍摄数据集
Jun 01 Python
使用遗传算法求二元函数的最小值
Feb 11 Python
浅谈spring boot 集成 log4j 解决与logback冲突的问题
Feb 20 Python
Python生成六万个随机,唯一的8位数字和数字组成的随机字符串实例
Mar 03 Python
python opencv把一张图片嵌入(叠加)到另一张图片上的实现代码
Jun 11 Python
利用scikitlearn画ROC曲线实例
Jul 02 Python
Python 处理日期时间的Arrow库使用
Aug 18 Python
python 多线程死锁问题的解决方案
Aug 25 Python
Python实现双向链表
May 25 Python
把django中admin后台界面的英文修改为中文显示的方法
Jul 26 #Python
Python中利用LSTM模型进行时间序列预测分析的实现
Jul 26 #Python
django的model操作汇整详解
Jul 26 #Python
django的csrf实现过程详解
Jul 26 #Python
详解Python 4.0 预计推出的新功能
Jul 26 #Python
python mysql断开重连的实现方法
Jul 26 #Python
seek引发的python文件读写的问题及解决
Jul 26 #Python
You might like
Zend Studio 无法启动的问题解决方法
2008/12/04 PHP
PHP 变量的定义方法
2010/01/26 PHP
深入php socket的讲解与实例分析
2013/06/13 PHP
Laravel框架数据库CURD操作、连贯操作总结
2014/09/03 PHP
PHP生成不重复标识符的方法
2014/11/21 PHP
php单例模式的简单实现方法
2016/06/10 PHP
用JavaScript脚本实现Web页面信息交互
2006/10/11 Javascript
Confirmer JQuery确认对话框组件
2010/06/09 Javascript
jQuery 借助插件Lavalamp实现导航条动态美化效果
2013/09/27 Javascript
javascript中数组中求最大值示例代码
2013/12/18 Javascript
利用javascript判断文件是否存在
2013/12/31 Javascript
手机端网页点击链接触发自动拨打或保存电话的示例代码
2014/08/15 Javascript
json实现前后台的相互传值详解
2015/01/05 Javascript
angularjs学习笔记之双向数据绑定
2015/09/26 Javascript
深入理解js promise chain
2016/05/05 Javascript
Angularjs2不同组件间的通信实例代码
2017/05/06 Javascript
修改npm全局安装模式的路径方法
2018/05/15 Javascript
javascript操作向表格中动态加载数据
2020/08/27 Javascript
vue添加自定义右键菜单的完整实例
2020/12/08 Vue.js
解决await在forEach中不起作用的问题
2021/02/25 Javascript
python如何使用正则表达式的前向、后向搜索及前向搜索否定模式详解
2017/11/08 Python
Python编写单元测试代码实例
2020/09/10 Python
filter使用python3代码进行迭代元素的实例详解
2020/12/03 Python
利用python制作拼图小游戏的全过程
2020/12/04 Python
python自动化发送邮件实例讲解
2021/01/04 Python
Html5自定义字体解决方法
2019/10/09 HTML / CSS
MADE法国:提供原创设计师家具
2018/09/18 全球购物
英国领先的隐形眼镜在线供应商:Lenstore.co.uk
2019/11/24 全球购物
ASP.NET中的身份验证有那些
2012/07/13 面试题
2014年圣诞节促销方案
2014/03/14 职场文书
综合素质评价自我评价
2015/03/06 职场文书
个人简历自我评价怎么写
2015/03/10 职场文书
事业单位岗位说明书
2015/10/08 职场文书
公司致全体员工的感谢信
2019/06/24 职场文书
FP-growth算法发现频繁项集——发现频繁项集
2021/06/24 Python
浅谈JavaScript作用域
2021/12/06 Javascript