Abort 404 请求后不能在烧瓶中工作

问题描述 投票:0回答:1

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

这是我的示例代码:

@app.after_request
def restricted_access(response):
    if g.site == 'store':
        return abort(404)
    return response
python flask http-status-code-404
1个回答
4
投票

abort(404)
引发异常,它不会 return 响应对象。但是由于
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()

© www.soinside.com 2019 - 2024. All rights reserved.