You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask登录验证装饰器出现‘global name @wraps is not defined’错误求助

解决Flask装饰器中"global name @wraps is not defined"的问题

嘿,这个报错我太熟悉啦!问题出在你没导入functools里的wraps装饰器——它是用来保留被装饰函数原始元数据(比如函数名、文档字符串)的关键工具,Flask的自定义装饰器几乎都得用到它。

具体修复步骤:

  1. 添加wraps的导入语句
    在你的代码顶部,加上这一行:

    from functools import wraps
    

    同时也要确保你已经导入了Flask相关的必要模块,避免后续出现其他报错:

    from flask import session, flash, redirect, url_for
    
  2. 修正后的完整代码
    补全导入后,你的登录检查装饰器就能正常工作了:

    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:59:07