Python 中实现装饰器时使用 @functools.wraps 的理由
2024-08-24 08:29:01
Python 中使用装饰器对在运行期对函数进行一些外部功能的扩展。但是在使用过程中,由于装饰器的加入导致解释器认为函数本身发生了改变,在某些情况下——比如测试时——会导致一些问题。Python 通过 functool.wraps
为我们解决了这个问题:在编写装饰器时,在实现前加入 @functools.wraps(func)
可以保证装饰器不会对被装饰函数造成影响。比如,在 Flask 中,我们要自己重写 login_required
装饰器,但不想影响被装饰器装饰的方法,则 login_required
装饰器本身可以写成下面的样子:
def login_required_(func):
@wraps(func)
def decorated_view(*args, **kwargs):
if current_app.login_manager._login_disabled:
return func(*args, **kwargs)
elif not current_user.is_authenticated:
# return current_app.login_manager.unauthorized()
return redirect(url_for("login.loginPage", next=request.url))
return func(*args, **kwargs) return decorated_view
最新文章
- geotrellis使用(十一)实现空间数据库栅格化以及根据属性字段进行赋值
- 关于monkeyrunner的一些初步理解性的题目
- jQuery选择器和DOM操作——《锋利的jQuery》(第2版)读书笔记1
- iOS上百度输入法引起的问题
- UVa1449 - Dominating Patterns(AC自动机)
- 在Django中使用Mako模板
- cf B George and Round
- Direct2D
- java中使用正则表达式匹配字符串
- Http协议---Hyper Text Transfer Protocol
- CentOS 7 安装.NET Core 2.0
- CentOS(Linux)下安装dmidecode包
- GIT入门笔记(1)- Git的基本概念
- 学习ASP.NET Core Razor 编程系列十四——文件上传功能(二)
- ArrayList增加扩容问题 源码分析
- 关于centerOS下修改网络连接
- 即时通讯(I)
- icehouse版本中常用操作命令
- 免费证书https://lamp.sh/ssl.html
- 【代码笔记】iOS-自定义loading