Flask登录验证装饰器出现‘global name @wraps is not defined’错误求助
解决Flask装饰器中"global name @wraps is not defined"的问题
嘿,这个报错我太熟悉啦!问题出在你没导入functools里的wraps装饰器——它是用来保留被装饰函数原始元数据(比如函数名、文档字符串)的关键工具,Flask的自定义装饰器几乎都得用到它。
具体修复步骤:
添加
wraps的导入语句
在你的代码顶部,加上这一行:from functools import wraps同时也要确保你已经导入了Flask相关的必要模块,避免后续出现其他报错:
from flask import session, flash, redirect, url_for修正后的完整代码
补全导入后,你的登录检查装饰器就能正常工作了:from functools import wraps from flask import session, flash, redirect, url_for # 检查未登录用户是否能访问受限页面 def is_logged_in(f): @wraps(f) def wrap(*args, **kwargs): if 'logged_in' in session: return f(*args, **kwargs) else: flash('Please Login ', 'danger') return redirect(url_for('login')) return wrap
小补充:为什么需要wraps?
如果不用wraps,被装饰后的函数会丢失原来的名称和文档信息,可能导致Flask路由系统出现异常(比如无法正确识别路由函数),所以这个导入是必不可少的哦~
内容的提问来源于stack exchange,提问作者kristof
相关产品推荐
相关产品推荐

