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 相关文章推荐
linux系统使用python监测网络接口获取网络的输入输出
Jan 15 Python
Python 实现购物商城,含有用户入口和商家入口的示例
Sep 15 Python
python scp 批量同步文件的实现方法
Jan 03 Python
利用Django提供的ModelForm增删改数据的方法
Jan 06 Python
python初学者,用python实现基本的学生管理系统(python3)代码实例
Apr 10 Python
python将类似json的数据存储到MySQL中的实例
Jul 12 Python
在linux系统下安装python librtmp包的实现方法
Jul 22 Python
Python使用itchat模块实现群聊转发,自动回复功能示例
Aug 26 Python
Python Opencv提取图片中某种颜色组成的图形的方法
Sep 19 Python
Python基础之字符串操作常用函数集合
Feb 09 Python
Pycharm安装第三方库失败解决方案
Nov 17 Python
Pytorch如何切换 cpu和gpu的使用详解
Mar 01 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来处理多个提交任务
2008/05/08 PHP
PHP 配置文件中open_basedir选项作用
2009/07/19 PHP
php的数组与字符串的转换函数整理汇总
2013/07/18 PHP
php ci框架中加载css和js文件失败的解决方法
2014/03/03 PHP
弹出模态框modal的实现方法及实例
2017/09/19 PHP
jquery 3D球状导航的文章分类
2010/07/06 Javascript
JavaScript极简入门教程(三):数组
2014/10/25 Javascript
angular.foreach 循环方法使用指南
2015/01/06 Javascript
JQ技术实现注册页面带有校验密码强度
2015/07/27 Javascript
javascript实现简单的分页特效
2015/08/12 Javascript
FullCalendar日历插件应用之数据展现(一)
2015/12/23 Javascript
浅谈js中StringBuffer类的实现方法及使用
2016/09/02 Javascript
深入了解JavaScript的逻辑运算符(与、或)
2016/12/20 Javascript
详解vue组件通信的三种方式
2017/06/30 Javascript
webpack v4 从dev到prd的方法
2018/04/02 Javascript
一个Vue页面的内存泄露分析详解
2018/06/25 Javascript
浅谈JavaScript 代码整洁之道
2018/10/23 Javascript
JS多个表单数据提交下的serialize()应用实例分析
2019/08/27 Javascript
Vue v-text指令简单使用方法示例
2019/09/19 Javascript
vue中全局路由守卫中替代this操作(this.$store/this.$vux)
2020/07/24 Javascript
谈谈JavaScript中的垃圾回收机制
2020/09/17 Javascript
零基础写python爬虫之爬虫框架Scrapy安装配置
2014/11/06 Python
Python自定义进程池实例分析【生产者、消费者模型问题】
2016/09/19 Python
Python实现全角半角字符互转的方法
2016/11/28 Python
python实现二维码扫码自动登录淘宝
2016/12/27 Python
Python存取XML的常见方法实例分析
2017/03/21 Python
基于Django contrib Comments 评论模块(详解)
2017/12/08 Python
详解Python 协程的详细用法使用和例子
2018/06/15 Python
对Tensorflow中的变量初始化函数详解
2018/07/27 Python
在Django中实现添加user到group并查看
2019/11/18 Python
keras自定义回调函数查看训练的loss和accuracy方式
2020/05/23 Python
用HTML5 Canvas API中的clearRect()方法实现橡皮擦功能
2016/03/15 HTML / CSS
结婚纪念日感言
2015/08/01 职场文书
Python3接口性能测试实例代码
2021/06/20 Python
Javascript的promise,async和await的区别详解
2022/03/24 Javascript
MySQL分布式恢复进阶
2022/07/23 MySQL