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中的类,对象,方法,属性
Sep 11 Python
对Python中type打开文件的方式介绍
Apr 28 Python
Python实现拷贝/删除文件夹的方法详解
Aug 29 Python
Python3 文章标题关键字提取的例子
Aug 26 Python
django实现支付宝支付实例讲解
Oct 17 Python
Python使用pymysql模块操作mysql增删改查实例分析
Dec 19 Python
Pytorch实现基于CharRNN的文本分类与生成示例
Jan 08 Python
解决Python import docx出错DLL load failed的问题
Feb 13 Python
对Matlab中共轭、转置和共轭装置的区别说明
May 11 Python
解决Keras中循环使用K.ctc_decode内存不释放的问题
Jun 29 Python
基于Django快速集成Echarts代码示例
Dec 01 Python
Python实现仓库管理系统
May 30 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
Banner程序
2006/10/09 PHP
mysql,mysqli,PDO的各自不同介绍
2012/09/19 PHP
zend optimizer在wamp的基础上安装图文教程
2013/10/26 PHP
php异步:在php中使用fsockopen curl实现类似异步处理的功能方法
2016/12/10 PHP
laravel5实现微信第三方登录功能
2018/12/06 PHP
不常用但很实用的PHP预定义变量分析
2019/06/25 PHP
多个表单中如何获得这个文件上传的网址实现js代码
2013/03/25 Javascript
如何使用jQuery来处理图片坏链具体实现步骤
2013/05/02 Javascript
web css实现整站样式互相切换
2013/10/29 Javascript
JQuery记住用户名和密码的具体实现
2014/04/04 Javascript
jquery中map函数与each函数的区别实例介绍
2014/06/23 Javascript
Js与Jq 获取页面元素值的方法和差异对比
2015/04/30 Javascript
使用jQuery调用XML实现无刷新即时聊天
2016/08/07 Javascript
Jquery Easyui日历组件Calender使用详解(23)
2016/12/18 Javascript
jquery实现输入框实时输入触发事件代码
2016/12/21 Javascript
canvas 弹幕效果(实例分享)
2017/01/11 Javascript
node.js连接MongoDB数据库的2种方法教程
2017/05/17 Javascript
微信小程序第三方框架对比 之 wepy / mpvue / taro
2019/04/10 Javascript
[01:04:49]KG vs LGD 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
[01:10]为家乡而战!完美世界城市挑战赛全国总决赛花絮
2019/07/25 DOTA
举例详解Python中yield生成器的用法
2015/08/05 Python
python实现画循环圆
2019/11/23 Python
Pytorch中.new()的作用详解
2020/02/18 Python
Python环境配置实现pip加速过程解析
2020/11/27 Python
10个顶级Python实用库推荐
2021/03/04 Python
全球最大的户外用品零售商之一:The House
2018/06/12 全球购物
2014国培学习感言
2014/03/05 职场文书
创建精神文明单位实施方案
2014/03/08 职场文书
应届毕业生求职信范文
2014/07/07 职场文书
政风行风建设责任书
2014/07/23 职场文书
离婚协议书范文2014
2014/10/16 职场文书
一年级数学上册复习计划
2015/01/17 职场文书
清明节随笔
2015/08/15 职场文书
2019新员工试用期转正工作总结范文
2019/08/21 职场文书
python 自动刷新网页的两种方法
2021/04/20 Python
html5 录制mp3音频支持采样率和比特率设置
2021/07/15 Javascript