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

Flask自定义装饰器not_login_required失效问题求助

问题原因及解决方法

你的装饰器不起作用的核心原因是装饰器顺序错误,同时装饰器缺少functools.wraps来保留函数元信息(可避免潜在问题)。

1. 修正装饰器顺序

Flask的@app.route装饰器需要最靠近被装饰的视图函数,它的作用是将当前装饰的函数注册为路由的处理逻辑。你当前的写法是先给login函数套上自定义装饰器,再套路由装饰器,这会导致路由注册的是未经过not_login_required处理的原函数,装饰器逻辑自然不会生效。

正确的使用顺序:

@app.route('/login/', methods=['GET', 'POST'])
@not_login_required
def login():
    # 你的业务代码

2. 完善装饰器(添加functools.wraps)

顺序修正后装饰器即可生效,但建议给装饰器添加functools.wraps,它会将原函数的元信息(如函数名、文档字符串等)复制到包装函数中,避免Flask在处理路由或调试时出现异常。

完善后的装饰器代码:

from functools import wraps
from flask import current_user, redirect

def not_login_required(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        if current_user.is_authenticated:
            return redirect('/')
        return func(*args, **kwargs)
    return wrapper

调整后,not_login_required装饰器就能正常工作:已认证用户访问/login/时会被重定向到首页,未认证用户可正常进入登录页面。

内容的提问来源于stack exchange,提问作者Minuta18

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 02:52:09