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通过socket查询whois的方法
Jul 18 Python
python通过微信发送邮件实现电脑关机
Jun 20 Python
详解python中的hashlib模块的使用
Apr 22 Python
从列表或字典创建Pandas的DataFrame对象的方法
Jul 06 Python
Django自定义模板过滤器和标签的实现方法
Aug 21 Python
python框架django项目部署相关知识详解
Nov 04 Python
python 使用递归实现打印一个数字的每一位示例
Feb 27 Python
python GUI库图形界面开发之PyQt5信号与槽多窗口数据传递详细使用方法与实例
Mar 08 Python
python解压zip包中文乱码解决方法
Nov 27 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
Dec 01 Python
Python爬虫之Selenium设置元素等待的方法
Dec 04 Python
Python编写冷笑话生成器
Apr 20 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
配置支持SSI
2006/11/25 PHP
php 清除网页病毒的方法
2008/12/05 PHP
php购物车实现方法
2015/01/03 PHP
PHP判断浏览器、判断语言代码分享
2015/03/05 PHP
php打包压缩文件之ZipArchive方法用法分析
2016/04/30 PHP
PHP中mysqli_get_server_version()的实例用法
2020/02/03 PHP
jquery里的正则表达式说明
2011/08/03 Javascript
jQuery 阴影插件代码分享
2012/01/09 Javascript
浅谈JavaScript 浏览器对象
2016/06/03 Javascript
AngularJS基础 ng-dblclick 指令用法
2016/08/01 Javascript
jquery表格datatables实例解析 直接加载和延迟加载
2016/08/12 Javascript
JavaScript使用键盘输入控制实现数字验证功能
2016/08/19 Javascript
easyUI实现(alert)提示框自动关闭的实例代码
2016/11/07 Javascript
基于$.ajax()方法从服务器获取json数据的几种方式总结
2018/01/31 Javascript
Vue开发实现吸顶效果的示例代码
2018/08/21 Javascript
Vue的click事件防抖和节流处理详解
2019/11/13 Javascript
如何在vue项目中嵌入jsp页面的方法(2种)
2020/02/06 Javascript
Python利用pyHook实现监听用户鼠标与键盘事件
2014/08/21 Python
python中利用Future对象异步返回结果示例代码
2017/09/07 Python
使用paramiko远程执行命令、下发文件的实例
2017/10/01 Python
Pandas Shift函数的基础入门学习笔记
2018/11/16 Python
Python小进度条显示代码
2019/03/05 Python
将python文件打包成EXE应用程序的方法
2019/05/22 Python
python向字符串中添加元素的实例方法
2019/06/28 Python
Python学习之路之pycharm的第一个项目搭建过程
2020/06/18 Python
使用HTML5 Canvas绘制直线或折线等线条的方法讲解
2016/03/14 HTML / CSS
物业经理求职自我评价
2013/09/22 职场文书
中专毕业生自我鉴定
2013/11/21 职场文书
中学生团员自我评价分享
2013/12/07 职场文书
会计职业生涯规划范文
2014/01/04 职场文书
企业家王石演讲稿:坚持与放下
2014/04/27 职场文书
治庸问责心得体会
2014/09/12 职场文书
教师节主题班会方案
2015/08/17 职场文书
HTTP中的Content-type详解
2022/01/18 HTML / CSS
python单向链表实例详解
2022/05/25 Python
sql注入报错之注入原理实例解析
2022/06/10 MySQL