我有两个after_request处理程序。就我而言,我需要一个在下一个之前开火。
@app.after_request
def after_request_check_something(response):
# do something
return response
@app.after_request
def after_request_compress(response):
# do something
return response
Run Code Online (Sandbox Code Playgroud)
就我而言,我想先进行压缩,然后再进行check_something。但是他们正相反。
如果重要的话,在我的实际代码中,不会像这样连续声明这两个处理程序。它们分别位于在不同时间安装的不同模块中。
如何控制执行顺序?
Flask的after_request钩子确实按照其声明的相反顺序执行。相反,before_request挂钩按其声明顺序执行。
如果after_request在蓝图上声明了挂钩,则在全局after_request挂钩之前,挂钩将以相反的声明顺序执行。如果before_request在蓝图上声明了挂钩,则在全局before_request挂钩之后按声明顺序执行挂钩。
有关实现的详细信息,请参见preprocess_request和process_response源代码。
编辑: user8808265 的答案看起来比我的更正确。
从文档来看,似乎无法after_request命令这些处理程序的执行。该实现将处理程序存储在本质上无序的字典中。
我建议创建一个单独的处理程序,以正确的顺序调用这两个处理程序,例如:
def after_request_check_something(response):
# do something
return response
def after_request_compress(response):
# do something
return response
@app.after_request
def after_request_combined(response):
response1 = after_request_compress(response)
return after_request_check_something(response1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
676 次 |
| 最近记录: |