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实现rest请求api示例
Apr 22 Python
python基础教程之基本数据类型和变量声明介绍
Aug 29 Python
在Docker上部署Python的Flask框架的教程
Apr 08 Python
如何在django里上传csv文件并进行入库处理的方法
Jan 02 Python
python实现移位加密和解密
Mar 22 Python
python实现五子棋小程序
Jun 18 Python
python中通过selenium简单操作及元素定位知识点总结
Sep 10 Python
python 实现二维列表转置
Dec 02 Python
利用Tensorboard绘制网络识别准确率和loss曲线实例
Feb 15 Python
PyCharm配置anaconda环境的步骤详解
Jul 31 Python
记录一下scrapy中settings的一些配置小结
Sep 28 Python
Python plt 利用subplot 实现在一张画布同时画多张图
Feb 26 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 操作调试的方法
2012/07/12 PHP
php实现多站点共用session实现单点登录的方法详解
2019/09/18 PHP
如何在标题栏显示框架内页面的标题
2007/02/03 Javascript
JavaScript CSS修改学习第一章 查找位置
2010/02/19 Javascript
文本域光标操作的jQuery扩展分享
2014/03/10 Javascript
让人蛋疼的JavaScript语法特性
2014/09/30 Javascript
基于Jquery代码实现手风琴菜单
2015/11/19 Javascript
学习jQuey中的return false
2015/12/18 Javascript
JavaScript设计模式之单体模式全面解析
2016/09/09 Javascript
vue页面使用阿里oss上传功能的实例(一)
2017/08/09 Javascript
vue cli升级webapck4总结
2018/04/04 Javascript
使用pkg打包Node.js应用的方法步骤
2018/10/19 Javascript
Vuejs监听vuex中值的变化的方法示例
2018/12/02 Javascript
如何解决vue在ios微信"复制链接"功能问题
2020/03/26 Javascript
javascript执行上下文、变量对象实例分析
2020/04/25 Javascript
纯JS开发baguetteBox.js响应式画廊插件
2020/06/28 Javascript
element日历calendar组件上月、今天、下月、日历块点击事件及模板源码
2020/07/27 Javascript
详解Vue中Axios封装API接口的思路及方法
2020/10/10 Javascript
python将字符串转换成数组的方法
2015/04/29 Python
python文件与目录操作实例详解
2016/02/22 Python
Python3生成手写体数字方法
2018/01/30 Python
python logging模块的使用总结
2019/07/09 Python
python每5分钟从kafka中提取数据的例子
2019/12/23 Python
如何基于python操作json文件获取内容
2019/12/24 Python
python 安装教程之Pycharm安装及配置字体主题,换行,自动更新
2020/03/13 Python
Python GUI编程学习笔记之tkinter界面布局显示详解
2020/03/30 Python
为什么python比较流行
2020/06/19 Python
如何实现一个python函数装饰器(Decorator)
2020/10/12 Python
使用Pytorch搭建模型的步骤
2020/11/16 Python
strstr()的简单实现
2013/09/26 面试题
财务管理专业毕业生求职信范文
2013/09/21 职场文书
化学教师教学反思
2014/01/17 职场文书
领导班子四风问题个人对照检查材料
2014/10/04 职场文书
酒店员工手册范本
2015/05/14 职场文书
2016大学生社会实践心得体会范文
2016/01/14 职场文书
8g内存用python读取10文件_面试题-python 如何读取一个大于 10G 的txt文件?
2021/05/28 Python