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

时间:2014-06-19 20:15:24

标签: python http 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 个答案:

答案 0 :(得分:3)

上下文是全局全局。当您从check_status()拨打website_users()时,上下文处于有效状态。

不是redirect()可调用的需要一个上下文;它所做的只是生成一个Response()对象,不需要上下文。

忽略了check_status()的返回值。也许您需要检查check_status()是否正在返回某些内容:

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

或者,让check_status()引发异常。您可以在视图中处理该异常(并将其转换为重定向响应),或者您可以注册errorhandler() function来处理专用异常:

class StatusDenied(Exception):
    pass

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

def check_status():
    raise StatusDenied