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进程间通信之共享内存详解
Oct 30 Python
ubuntu安装mysql pycharm sublime
Feb 20 Python
Python实现的简单读写csv文件操作示例
Jul 12 Python
python实现在图片上画特定大小角度矩形框
Oct 24 Python
python numpy元素的区间查找方法
Nov 14 Python
Pytorch .pth权重文件的使用解析
Feb 14 Python
ubuntu 安装pyqt5和卸载pyQt5的方法
Mar 24 Python
Django DRF APIView源码运行流程详解
Aug 17 Python
Python 实现3种回归模型(Linear Regression,Lasso,Ridge)的示例
Oct 15 Python
python定义具名元组实例操作
Feb 28 Python
python中的3种定义类方法
Nov 27 Python
python中字符串String及其常见操作指南(方法、函数)
Apr 06 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下escape解码函数的实现方法
2010/08/08 PHP
php实现rc4加密算法代码
2012/04/25 PHP
CodeIgniter框架常见用法工作总结
2017/03/16 PHP
改进:论坛UBB代码自动插入方式
2006/12/22 Javascript
juqery 学习之五 文档处理 插入
2011/02/11 Javascript
ASP.NET jQuery 实例8 (动态添加内容到DropDownList)
2012/02/03 Javascript
extjs关于treePanel+chekBox全部选中以及清空选中问题探讨
2013/04/02 Javascript
使用JSON.parse将json字符串转换成json对象的时候会出错
2014/09/04 Javascript
使用AngularJS 应用访问 Android 手机的图片库
2015/03/24 Javascript
详解js中构造流程图的核心技术JsPlumb(2)
2015/12/08 Javascript
将html页面保存成图片,图片写入pdf的实现方法(推荐)
2016/09/17 Javascript
JavaScript实现横线提示输入验证码随输入验证码输入消失的方法
2016/09/24 Javascript
AngularJS入门教程之模块化操作用法示例
2016/11/02 Javascript
完美解决浏览器跨域的几种方法(汇总)
2017/05/08 Javascript
nodejs对express中next函数的一些理解
2017/09/08 NodeJs
Vue的土著指令和自定义指令实例详解
2018/02/04 Javascript
微信小程序中转义字符的处理方法
2019/03/28 Javascript
Vue.js实现大转盘抽奖总结及实现思路
2019/10/09 Javascript
vue组件添加事件@click.native操作
2020/10/30 Javascript
ant-design-vue中tree增删改的操作方法
2020/11/03 Javascript
[54:41]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VGJ.T VS paiN
2018/03/31 DOTA
python实现基本进制转换的方法
2015/07/11 Python
python结合API实现即时天气信息
2016/01/19 Python
对PyQt5的输入对话框使用(QInputDialog)详解
2019/06/25 Python
pytorch 指定gpu训练与多gpu并行训练示例
2019/12/31 Python
Python获取浏览器窗口句柄过程解析
2020/07/25 Python
Jowissa官方网站:瑞士制造的手表,优雅简约的设计
2020/07/29 全球购物
毕业研究生的自我鉴定
2013/11/30 职场文书
后勤采购员岗位职责
2013/12/19 职场文书
工作表现自我评价
2014/02/08 职场文书
学生周末长期请假条
2014/02/15 职场文书
计算机毕业生求职信
2014/06/10 职场文书
条幅标语大全
2014/06/20 职场文书
网络销售员岗位职责
2015/04/11 职场文书
介绍信范文大全
2015/05/07 职场文书
2015年学校总务工作总结
2015/07/20 职场文书