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