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实现桶排序与快速排序算法结合应用示例
Nov 22 Python
读取本地json文件,解析json(实例讲解)
Dec 06 Python
Python无损音乐搜索引擎实现代码
Feb 02 Python
Python中pow()和math.pow()函数用法示例
Feb 11 Python
Python Django框架单元测试之文件上传测试示例
May 17 Python
使用Python生成200个激活码的实现方法
Nov 22 Python
Python hashlib模块实例使用详解
Dec 24 Python
Python itertools.product方法代码实例
Mar 27 Python
Pycharm2020最新激活码|永久激活(附最新激活码和插件的详细教程)
Sep 29 Python
python实现简单猜单词游戏
Dec 24 Python
Python列表元素删除和remove()方法详解
Jan 04 Python
python+selenium小米商城红米K40手机自动抢购的示例代码
Mar 24 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
php数组查找函数总结
2014/11/18 PHP
PHP实现恶意DDOS攻击避免带宽占用问题方法
2015/05/27 PHP
yii数据库的查询方法
2015/12/28 PHP
THINKPHP在添加数据的时候获取主键id的值方法
2017/04/03 PHP
Nginx实现反向代理
2017/09/20 Servers
第一个JavaScript入门基础 document.write输出
2010/02/22 Javascript
FF(火狐)浏览器无法执行window.close()解决方案
2014/11/13 Javascript
jquery果冻抖动效果实现方法
2015/01/15 Javascript
js实现卡片式项目管理界面UI设计效果
2015/12/08 Javascript
js实现数组冒泡排序、快速排序原理
2016/03/08 Javascript
JavaScript_ECMA5数组新特性详解
2016/06/12 Javascript
jquery checkbox无法用attr()二次勾选问题的解决方法
2016/07/22 Javascript
Ionic+AngularJS实现登录和注册带验证功能
2017/02/09 Javascript
axios对请求各种异常情况处理的封装方法
2018/09/25 Javascript
Node.js npm命令运行node.js脚本的方法
2018/10/10 Javascript
微信小程序中如何计算距离某个节日还有多少天
2019/07/15 Javascript
JavaScript 继承 封装 多态实现及原理详解
2019/07/29 Javascript
js实现时分秒倒计时
2019/12/03 Javascript
在vue中使用echarts(折线图的demo,markline用法)
2020/07/20 Javascript
Vue和React有哪些区别
2020/09/12 Javascript
[00:53]TI3正赛第三天 DK怒破A队不败金身 现场国旗飘扬热血激昂
2013/08/10 DOTA
Python批量按比例缩小图片脚本分享
2015/05/21 Python
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
2017/06/12 Python
python单例模式原理与创建方法实例分析
2019/10/26 Python
python机器学习库xgboost的使用
2020/01/20 Python
联想瑞士官方网站:Lenovo Switzerland
2017/11/19 全球购物
英国家庭家具、照明和花园家具购物网站:Furniture123
2018/12/31 全球购物
Bose美国官网:购买Bose耳机和音箱
2019/03/10 全球购物
如何理解委托
2012/01/06 面试题
公积金单位接收函
2014/01/11 职场文书
工程造价专业大学生职业生涯规划书
2014/01/18 职场文书
个人简历中的自我评价怎么写
2014/01/26 职场文书
新闻专业毕业生英文求职信
2014/03/19 职场文书
校庆标语集锦
2014/06/25 职场文书
2014年教师节活动总结
2014/08/29 职场文书
Java并发编程之原子性-Atomic的使用
2022/03/16 Java/Android