我有一个带有 Flask 的多域网站,但我想限制对所有视图和蓝图的访问,除了那些我允许在某些域中访问它们的视图和蓝图。所以我决定在请求装饰器之后使用烧瓶来做到这一点,但问题是在请求之后中止在烧瓶中不起作用。有什么问题吗?
这是我的示例代码:
@app.after_request
def restricted_access(response):
if g.site == 'store':
return abort(404)
return response
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()
。