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 相关文章推荐
wxPython学习之主框架实例
Sep 28 Python
Python使用PyCrypto实现AES加密功能示例
May 22 Python
python3+PyQt5实现自定义分数滑块部件
Apr 24 Python
python清除字符串中间空格的实例讲解
May 11 Python
Python双向循环链表实现方法分析
Jul 30 Python
Python设计模式之原型模式实例详解
Jan 18 Python
python实现两个经纬度点之间的距离和方位角的方法
Jul 05 Python
python 类的继承 实例方法.静态方法.类方法的代码解析
Aug 23 Python
python 使用while写猜年龄小游戏过程解析
Oct 07 Python
Python 实现OpenCV格式和PIL.Image格式互转
Jan 09 Python
使用Python下载抖音各大V视频的思路详解
Feb 06 Python
详解pytorch创建tensor函数
Mar 22 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
一个用php3编写的简单计数器
2006/10/09 PHP
Joomla简单判断用户是否登录的方法
2016/05/04 PHP
PHP获取网站中各文章的第一张图片的代码示例
2016/05/20 PHP
PHP实现对二维数组某个键排序的方法
2016/09/14 PHP
jQuery 瀑布流 浮动布局(一)(延迟AJAX加载图片)
2012/05/23 Javascript
百度UEditor编辑器如何关闭抓取远程图片功能
2015/03/03 Javascript
javascript中几个容易混淆的概念总结
2015/04/14 Javascript
jQuery实现html表格动态添加新行的方法
2015/05/28 Javascript
JavaScript的代码编写格式规范指南
2015/12/07 Javascript
JCrop+ajaxUpload 图像切割上传的实例代码
2016/07/20 Javascript
bootstrap3 dialog 更强大、更灵活的模态框
2017/04/20 Javascript
JS创建Tag标签的方法详解
2017/06/09 Javascript
vue中component组件的props使用详解
2017/09/04 Javascript
angular 实现下拉列表组件的示例代码
2019/03/09 Javascript
一文读懂ES7中的javascript修饰器
2019/05/06 Javascript
package.json中homepage属性的作用详解
2020/03/11 Javascript
electron踩坑之remote of undefined的解决
2020/10/06 Javascript
js实现点击烟花特效
2020/10/14 Javascript
vue实现拖拽进度条
2021/03/01 Vue.js
python使用正则搜索字符串或文件中的浮点数代码实例
2014/07/11 Python
在Windows服务器下用Apache和mod_wsgi配置Python应用的教程
2015/05/06 Python
Python md5与sha1加密算法用法分析
2017/07/14 Python
使用Python开发SQLite代理服务器的方法
2018/12/07 Python
Python编程图形库之Pillow使用方法讲解
2018/12/28 Python
python字典和json.dumps()的遇到的坑分析
2020/03/11 Python
Django封装交互接口代码
2020/07/12 Python
Python代码注释规范代码实例解析
2020/08/14 Python
使用Python操作MySQL的小技巧
2020/09/10 Python
css3 中translate和transition的使用方法
2020/03/26 HTML / CSS
解决html5中的video标签ios系统中无法播放使用的问题
2020/08/10 HTML / CSS
YSL圣罗兰美妆美国官网:Yves Saint Lauret US
2016/11/21 全球购物
工程造价专业大学生职业规划范文
2014/03/09 职场文书
生产设备维护保养制度
2015/08/06 职场文书
叶县这家生产军用电台的兵工厂,人称“四机部”,走出一上将
2022/02/18 无线电
Windows7下FTP搭建图文教程
2022/08/05 Servers
LeetCode189轮转数组python示例
2022/08/05 Python