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的爬虫框架Scrapy来抓取豆瓣电影TOP250
Jan 20 Python
Python使用Pycrypto库进行RSA加密的方法详解
Jun 06 Python
python中子类继承父类的__init__方法实例
Dec 15 Python
Python 模板引擎的注入问题分析
Jan 01 Python
python利用rsa库做公钥解密的方法教程
Dec 10 Python
python删除过期log文件操作实例解析
Jan 31 Python
Python实现的读取/更改/写入xml文件操作示例
Aug 30 Python
Python输出\u编码将其转换成中文的实例
Dec 15 Python
Python整数与Numpy数据溢出问题解决
Sep 11 Python
利用Python脚本实现自动刷网课
Feb 03 Python
Django权限设置及验证方式
May 13 Python
浅析Python 责任链设计模式
Sep 11 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页码形式分页函数支持静态化地址及ajax分页
2014/03/28 PHP
初识php MVC
2014/09/10 PHP
php while循环控制的简单实例
2016/05/30 PHP
php版阿里大于(阿里大鱼)短信发送实例详解
2016/11/30 PHP
详谈PHP中的密码安全性Password Hashing
2017/02/04 PHP
laravel5实现微信第三方登录功能
2018/12/06 PHP
Laravel5.1 框架控制器基础用法实例分析
2020/01/04 PHP
一段实现页面上的图片延时加载的js代码
2010/02/11 Javascript
javascript 命名规则 变量命名规则
2010/02/25 Javascript
JavaScript代码应该放在HTML代码哪个位置比较好?
2014/10/16 Javascript
javascript去除字符串左右两端的空格
2015/02/05 Javascript
php利用curl获取远程图片实现方法
2015/10/26 Javascript
详解javascript中原始数据类型Null和Undefined
2015/12/17 Javascript
thinkphp实现无限分类(使用递归)
2015/12/19 Javascript
BOM系列第二篇之定时器requestAnimationFrame
2016/08/17 Javascript
js for循环倒序输出数组元素的实例
2017/03/01 Javascript
vue2.0实现倒计时的插件(时间戳 刷新 跳转 都不影响)
2017/03/30 Javascript
详解Angular2响应式表单
2017/06/14 Javascript
在Js页面通过POST传递参数跳转到新页面详解
2017/08/25 Javascript
vue element自定义表单验证请求后端接口验证
2019/12/11 Javascript
[03:47]2015国际邀请赛第三日现场精彩回顾
2015/08/08 DOTA
python抓取某汽车网数据解析html存入excel示例
2013/12/04 Python
详细讲解Python中的文件I/O操作
2015/05/24 Python
python字符串编码识别模块chardet简单应用
2015/06/15 Python
python编程开发之日期操作实例分析
2015/11/13 Python
python selenium UI自动化解决验证码的4种方法
2018/01/05 Python
python定向爬取淘宝商品价格
2018/02/27 Python
PyQt5.6+pycharm配置以及pyinstaller生成exe(小白教程)
2020/06/02 Python
python mysql中in参数化说明
2020/06/05 Python
卡西欧G-SHOCK英国官网: 防水防震手表
2018/01/08 全球购物
俄罗斯女装店:12storeez
2019/10/25 全球购物
ShellScript面试题一则-ShellScript编程
2014/06/24 面试题
2015年世界无烟日演讲稿
2015/03/18 职场文书
2015秋季小学开学寄语
2015/05/27 职场文书
大学副班长竞选稿
2015/11/21 职场文书
观看《杨善洲》宣传教育片心得体会
2016/01/23 职场文书