flask - 如何在应用上下文外重定向

0 投票
1 回答
1181 浏览
提问于 2025-04-18 10:25

我想从一个没有用@app装饰器的函数里做一个简单的重定向,我该怎么做呢?(我想我需要让check_status()知道应用的上下文)

def check_status():
    return redirect("http://google.com")

@dashboard_bp.route('/dashboard')
@login_required
def website_users():
    check_status()
    return render_template('website_users.html')

1 个回答

3

这里的上下文是全局有效的。当你从 website_users() 调用 check_status() 时,上下文是活跃的。

需要注意的是,redirect() 这个可调用的东西并不需要上下文;它只是生成一个 Response() 对象,而这个对象不需要上下文。

不过,你确实忽略了 check_status() 的返回值。也许你需要检查一下 check_status() 是否返回了什么:

status = check_status()
if status is not None:
    # redirect
    return status

另外,你可以让 check_status() 抛出一个异常。你可以在你的视图中处理这个异常(并把它转成一个重定向响应),或者你可以注册一个 errorhandler() 函数 来处理特定的异常:

class StatusDenied(Exception):
    pass

@app.errorhandler(StatusDenied)
def redirect_on_status_denied(error):
    return redirect("http://google.com")

def check_status():
    raise StatusDenied

撰写回答