在请求后中止404不在烧瓶中工作

时间:2014-09-01 06:23:43

标签: python flask http-status-code-404

我有一个带有烧瓶的多域网站,但我希望限制访问所有视图和蓝图,除了我允许在某些域中访问它们的那些。所以我决定在请求装饰器之后使用flask来做到这一点,但问题是abort在请求后没有在flask中工作。有什么问题?

这是我的示例代码:

@app.after_request
def restricted_access(response):
    if g.site == 'store':
        return abort(404)
    return response

1 个答案:

答案 0 :(得分:2)

abort(404)引发异常,它不会返回响应对象。但由于after_request函数在正常视图处理之后执行,并且在异常处理程序之外执行,因此将不会处理引发的NotFound异常。

您可以重用通常应用于引发异常的视图的异常处理程序:

from werkzeug.exceptions import NotFound

@app.after_request
def restricted_access(response):
    if g.site == 'store':
        return current_app.make_response(
            current_app.handle_user_exception(NotFound()))
    return response

handle_user_exception()方法会返回response个对象。

也就是说,如果您已经知道g.site处理程序中before_request()的值,那么返回404就更容易了;您可以安全地在abort(404)处理程序中使用before_request()