通过decorators = [,] 的形式给类中的所有方法添加装饰器
给类添加装饰器有多种方法:
1.可以在类中的某个方法上边直接@添加,这个粒度细.无需详细介绍
2.也可以在类中通过 decorators=[, ]的形式添加,这样的话,类中的所有方法都会被一次性加上装饰器,粒度粗:
列表中多个装饰器的话,装饰器的添加顺序:
列表中: 从前 -> 往后,对应:
函数上边: 从下 -> 到上
下边以一个简单的flask项目为例演示一遍
# app.py内容 import time
from flask import Flask, views
from flask import render_template, redirect, request app = Flask(__name__) # 装饰器1
def print_time(func):
def inner(*args, **kwargs):
st = time.time()
ret = func(*args, **kwargs)
et = time.time()
print("use time: {}".format(et - st))
return ret return inner # 装饰器2
def say_hi(func):
def inner(*args, **kwargs):
print("第二层装饰器开始")
ret1 = func(*args, **kwargs)
et = time.time()
print("第二层装饰器结束")
return ret1 return inner class Login(views.MethodView):
# decorators = [print_time, say_hi]
# 顺序相当于:
# @say_hi
# @print_time
# 结果:
# 第二层装饰器开始
# use time: 0.005026817321777344
# 第二层装饰器结束 decorators = [say_hi, print_time]
# 顺序相当于:
# @print_time
# @say_hi
# 结果:
# 第二层装饰器开始
# 第二层装饰器结束
# use time: 0.006980419158935547 def get(self, *args, **kwargs):
return render_template("login.html") def post(self, *args, **kwargs):
print(
request.files) # ImmutableMultiDict([('myFile', <FileStorage: 'vim常用命令总结.md' ('application/octet-stream')>)])
print(request.files.get("myFile")) # < FileStorage: 'vim常用命令总结.md' ('application/octet-stream')>
my_file = request.files.get("myFile")
my_file.save(my_file.filename)
return "" app.add_url_rule("/login", view_func=Login.as_view(name="login")) if __name__ == '__main__':
app.run()
<!-- templates/login.html中内容 --> <!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta http-equiv="content-Type" charset="UTF-8">
<meta http-equiv="x-ua-compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Title</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
<input type="text" name="username">
<input type="file" name="myFile">
<input type="submit" value="提交">
</form>
</body>
</html>
通过decorators = [,] 的形式给类中的所有方法添加装饰器的更多相关文章
- python 类中的某个函数作为装饰器
在python的类中,制作一个装饰器的函数, class A: def wrapper(func): ###装饰器 def wrapped(self,*arg,**kwargs) ... return ...
- django class类即视图类添加装饰器的几种方法
根据别人发布整理,个人爱好收集(原文:https://blog.csdn.net/mydistance/article/details/83958655 ) 第一种:定义函数装饰器,在函数,类中使用函 ...
- StringBuilder类中的重要方法
下面的API注解包含了StringBuilder类中的重要方法 append(boolean b):将 boolean 参数的字符串表示形式追加到序列. append(char c):将 char 参 ...
- Effective Java 第三版——16.在公共类中使用访问方法而不是公共属性
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- 静态内部类定义在类中,任何方法外,用static定义
静态内部类:(注意:前三种内部类与变量类似,所以可以对照参考变量) 静态内部类定义在类中,任何方法外,用static定义. 静态内部类只能访问外部类的静态成员. 生成(new)一个静态内部类不需要外部 ...
- Java中是否可以调用一个类中的main方法?
前几天面试的时候,被问到在Java中是否可以调用一个类中的main方法?回来测试了下,答案是可以!代码如下: main1中调用main2的主方法 package org.fiu.test; impor ...
- 重写Object类中的equals方法
Object是所有类的父亲,这个类有很多方法,我们都可以直接调用,但有些方法并不适合,例如下面的student类 public class Student { //姓名.学号.年纪 private S ...
- PHP通过反射方法调用执行类中的私有方法
PHP 5 具有完整的反射 API,添加了对类.接口.函数.方法和扩展进行反向工程的能力. 下面我们演示一下如何通过反射,来调用执行一个类中的私有方法: <?php //MyClass这个类中包 ...
- Java String类中的intern()方法
今天在看一本书的时候注意到一个String的intern()方法,平常没用过,只是见过这个方法,也没去仔细看过这个方法.所以今天看了一下.个人觉得给String类中加入这个方法可能是为了提升一点点性能 ...
随机推荐
- 在局域网中搭建自己的gis服务器
在局域网中搭建自己的gis服务器 需求 在客户的B/S应用系统中使用电子地图.该系统只可运行于内部网中. 分析 由于系统中的电子地图只能运行于局域网中所以不能采用googl ...
- 一、.NetCore EF 之命令行
一.前言 最近在学习研究ABP,使用到微软的ORM框架 Entity Framework(后面简称EF),将其基本操作记录下来. 二.程序包管理器控制台 为了能够在控制台中使用命令行来操作EF,需要先 ...
- WebApp的自动测试工具: Jenkins
一.下载并安装(msi)https://jenkins.io/download/thank-you-downloading-windows-installer-stable/ 在安装过程这, 需要从p ...
- 最全面的DialogFragment的使用,实现DialogFragment全屏、背景透明;
Android推荐使用DialogFragment代替Dialog,好处就说一点吧,DialogFragment就是个盖在界面上的Fragment,它拥有Fragment一样的功能和生命周期,解决普通 ...
- [java,2019-01-15] word转pdf
word转pdf jar包 <dependency> <groupId>org.docx4j</groupId> <artifactId>docx4j& ...
- 如何解决fiddler的响应显示乱码问题
fiddler中Response出现乱码, 这是因为HTML被压缩了, 我们可以通过两种方法去解压.方法1:点击Response Raw上方的"Response is encoded any ...
- Spring boot 自定义拦截器
1.新建一个类实现HandlerInterceptor接口,重写接口的方法 package com.zpark.interceptor; import com.zpark.tools.Constant ...
- Hive:map字段存储和取用 ( str_to_map函数 )
str_to_map(字符串参数, 分隔符1, 分隔符2) 使用两个分隔符将文本拆分为键值对. 分隔符1将文本分成K-V对,分隔符2分割每个K-V对.对于分隔符1默认分隔符是 ',',对于分隔符2默认 ...
- 设计一函数,求整数区间[a,b]和[c,d]的交集
问题: 设计一函数,求整数区间[a,b]和[c,d]的交集.(c/c++.Java.Javascript.C#.Python) 1.Python: def calcMixed(a,b,c,d): r ...
- Ubuntu17.10安装Docker
Ubuntu环境下安装Docker 1. 系统要求 Docker目前只能运行在64位平台上,并且要求内核版本不低于3.10,实际上内核越新越好,过低的内核版本容易造成功能不稳定. 可以通过如下命令检查 ...