2017-01-03 60 views
3

我有两个after_request处理程序。就我而言,我需要一个在下一个之前开火。如何控制执行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 

在我的情况下,我想先压缩,然后check_something。但他们正在反向射击。

如果很重要,在我的实际代码中,这两个处理程序不会像这样连续声明。它们分别安装在不同的时间安装在不同的模块中。

如何控制执行顺序?

回答

3

the documentation,似乎不能执行这些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) 
    after_request_check_something(response1) 
+0

如果它们存储在字典那么可能的解决方案[使用Python 3.6(HTTP:/ /stackoverflow.com/questions/39980323/dictionaries-are-ordered-in-cpython-3-6);) –