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设计模式之单例模式实例
Apr 26 Python
Python中random模块生成随机数详解
Mar 10 Python
Python输出汉字字库及将文字转换为图片的方法
Jun 04 Python
总结python实现父类调用两种方法的不同
Jan 15 Python
Python发送邮件功能示例【使用QQ邮箱】
Dec 04 Python
Python3 单行多行万能正则匹配方法
Jan 07 Python
Python中的random.uniform()函数教程与实例解析
Mar 02 Python
Python使用到第三方库PyMuPDF图片与pdf相互转换
May 03 Python
pymysql模块的使用(增删改查)详解
Sep 09 Python
浅谈pycharm使用及设置方法
Sep 09 Python
把vgg-face.mat权重迁移到pytorch模型示例
Dec 27 Python
用pushplus+python监控亚马逊到货动态推送微信
Jan 29 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 foreach循环使用详解与实例代码
2010/05/08 PHP
基于PHP编程注意事项的小结
2013/04/27 PHP
浅析PHP原理之变量分离/引用(Variables Separation)
2013/08/09 PHP
php数组查找函数in_array()、array_search()、array_key_exists()使用实例
2014/04/29 PHP
php微信公众号js-sdk开发应用
2016/11/28 PHP
Extjs grid添加一个图片状态或者按钮的方法
2014/04/03 Javascript
js利用prototype调用Array的slice方法示例
2014/06/09 Javascript
jquery加载图片时以淡入方式显示的方法
2015/01/14 Javascript
jQuery插件pagination实现分页特效
2015/04/12 Javascript
jquery插件unobtrusive实现片段式加载
2015/06/15 Javascript
Bootstrap自定义文件上传下载样式
2016/05/26 Javascript
JavaScript必知必会(七)js对象继承
2016/06/08 Javascript
JQuery 设置checkbox值二次无效的解决方法
2016/07/22 Javascript
浅谈Angularjs link和compile的使用区别
2016/10/21 Javascript
详解nodejs中exports和module.exports的区别
2017/02/17 NodeJs
解决微信二次分享不显示摘要和图片的问题
2017/08/18 Javascript
es6系列教程_ Map详解以及常用api介绍
2017/09/25 Javascript
JS实现带导航城市列表以及输入搜索功能
2018/01/04 Javascript
基于VUE的v-charts的曲线显示功能
2019/10/01 Javascript
Express 配置HTML页面访问的实现
2020/11/01 Javascript
Python中super关键字用法实例分析
2015/05/28 Python
Python使用win32com模块实现数据库表结构自动生成word表格的方法
2018/07/17 Python
Python时间和字符串转换操作实例分析
2019/03/16 Python
win10安装python3.6的常见问题
2020/07/01 Python
无需压缩软件,用python帮你操作压缩包
2020/08/17 Python
canvas实现扭蛋机动画效果的示例代码
2018/10/17 HTML / CSS
The Hut德国站点:时装、家居用品、美容等
2016/09/23 全球购物
标签和贴纸印刷:Lightning Labels
2018/03/22 全球购物
德国内衣、泳装和睡衣网上商店:Bigsize Dessous
2018/07/09 全球购物
绘画专业自荐信
2014/07/04 职场文书
2015年宣传部工作总结范文
2015/03/31 职场文书
护士长2015年终工作总结
2015/04/24 职场文书
2016年公共机构节能宣传周活动总结
2016/04/05 职场文书
修改MySQL的默认密码的四种小方法
2021/05/26 MySQL
Spring依赖注入多种类型数据的示例代码
2022/03/31 Java/Android
Linux安装Docker详细教程
2022/07/07 Servers