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

  

最新文章

  1. geotrellis使用(十一)实现空间数据库栅格化以及根据属性字段进行赋值
  2. 关于monkeyrunner的一些初步理解性的题目
  3. jQuery选择器和DOM操作——《锋利的jQuery》(第2版)读书笔记1
  4. iOS上百度输入法引起的问题
  5. UVa1449 - Dominating Patterns(AC自动机)
  6. 在Django中使用Mako模板
  7. cf B George and Round
  8. Direct2D
  9. java中使用正则表达式匹配字符串
  10. Http协议---Hyper Text Transfer Protocol
  11. CentOS 7 安装.NET Core 2.0
  12. CentOS(Linux)下安装dmidecode包
  13. GIT入门笔记(1)- Git的基本概念
  14. 学习ASP.NET Core Razor 编程系列十四——文件上传功能(二)
  15. ArrayList增加扩容问题 源码分析
  16. 关于centerOS下修改网络连接
  17. 即时通讯(I)
  18. icehouse版本中常用操作命令
  19. 免费证书https://lamp.sh/ssl.html
  20. 【代码笔记】iOS-自定义loading

热门文章

  1. WN7下安装office2013编辑文档反应这么慢?
  2. Linux下查看nginx、mysql、php的安装路径和编译参数
  3. (十三)MySQL主从复制
  4. HDU 2547 无剑无我(数学)
  5. Lock wait timeout exceeded数据库死锁问题
  6. 洛谷——P1017 进制转换
  7. linux 下通过源代码安装程序 ./configure 解释
  8. 【网络流】【Dinic】【Next Array】Dinic模板
  9. 利用位操作进行IP地址的转化
  10. linux之touch命令修改文件的时间戳