2017-01-03 6 views
3

私は2つの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を使用します。しかし彼らは逆に発射している。

私の実際のコードでは、これらの2つのハンドラは、このように連続して宣言されていません。それらはそれぞれ異なる時間にインストールされた異なるモジュールにあります。

実行順序を制御するにはどうすればよいですか?

答えて

3

the documentationから、このafter_requestハンドラの実行を注文できるようには見えません。実装には、本質的に順序付けられていない辞書に格納されたハンドラがあります。

私は両方正しい順序で呼び出して別のハンドラ、のようなもの作りをお勧め:/:(HTTP [Pythonの3.6を使用する]彼らはその後、可能な解決策は、可能性がディクショナリに格納されている場合は

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

を/stackoverflow.com/questions/39980323/dictionaries-are-ordered-in-cpython-3-6);) –

関連する問題