2017-01-03 61 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);) –