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实现倒计时的示例
Feb 14 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
Jan 20 Python
python爬虫获取淘宝天猫商品详细参数
Jun 23 Python
python 递归深度优先搜索与广度优先搜索算法模拟实现
Oct 22 Python
python判断输入日期为第几天的实例
Nov 13 Python
Django框架 Pagination分页实现代码实例
Sep 04 Python
用python实现英文字母和相应序数转换的方法
Sep 18 Python
python科学计算之scipy——optimize用法
Nov 25 Python
Python基于数列实现购物车程序过程详解
Jun 09 Python
用python实现学生管理系统
Jul 24 Python
python 对一幅灰度图像进行直方图均衡化
Oct 27 Python
python 如何对logging日志封装
Dec 02 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
搜索和替换文件或目录的一个好类--很实用
2006/10/09 PHP
IIS下配置Php+Mysql+zend的图文教程
2006/12/08 PHP
php中is_null,empty,isset,unset 的区别详细介绍
2013/04/28 PHP
PHP魔术方法__GET、__SET使用实例
2014/11/25 PHP
jquery焦点图片切换(数字标注/手动/自动播放/横向滚动)
2013/01/24 Javascript
解析JSON对象与字符串之间的相互转换
2013/12/18 Javascript
ListBox实现上移,下移,左移,右移的简单实例
2014/02/13 Javascript
JavaScript中使用Callback控制流程介绍
2015/03/16 Javascript
javascript运动框架用法实例分析(实现放大与缩小效果)
2016/01/08 Javascript
深入浅析search 搜索框的写法
2016/08/02 Javascript
jQuery动态添加.active 实现导航效果代码思路详解
2017/08/29 jQuery
Angular2使用vscode断点调试ts文件的方法
2017/12/13 Javascript
详解Node.js中path模块的resolve()和join()方法的区别
2018/10/29 Javascript
vue-cli+iview项目打包上线之后图标不显示问题及解决方法
2019/10/16 Javascript
Vue通过WebSocket建立长连接的实现代码
2019/11/05 Javascript
在vue中配置不同的代理同时访问不同的后台操作
2020/09/11 Javascript
利用Fn.py库在Python中进行函数式编程
2015/04/22 Python
python使用正则表达式提取网页URL的方法
2015/05/26 Python
python PIL模块与随机生成中文验证码
2016/02/27 Python
Python基于二分查找实现求整数平方根的方法
2016/05/12 Python
Python正则表达式实现截取成对括号的方法
2017/01/06 Python
Python SQL查询并生成json文件操作示例
2018/08/17 Python
Python第三方Window模块文件的几种安装方法
2018/11/22 Python
浅谈PySpark SQL 相关知识介绍
2019/06/14 Python
利用matplotlib实现根据实时数据动态更新图形
2019/12/13 Python
python通过移动端访问查看电脑界面
2020/01/06 Python
django-xadmin根据当前登录用户动态设置表单字段默认值方式
2020/03/13 Python
基于python实现计算且附带进度条代码实例
2020/03/31 Python
物流经理自我评价
2013/09/23 职场文书
党建工作经验交流材料
2014/05/25 职场文书
2015年世界艾滋病日活动总结
2015/03/24 职场文书
搞笑婚礼主持词开场白
2015/11/24 职场文书
学校标语口号大全
2015/12/26 职场文书
JS监听Esc 键触发事键
2021/04/14 Javascript
pytorch 带batch的tensor类型图像显示操作
2021/05/20 Python
Hive HQL支持2种查询语句风格
2022/06/25 数据库