flask - 如何在应用上下文外重定向
我想从一个没有用@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