4

私はこのようなmiddwareを書きました:

class LogMiddleware( object ):

    def process_request( self, request ):
        logging.debug("start")

    def process_response( self, request, response ):
        logging.debug("end")
        return response

MIDDLEWARE_CLASSESの一番下に置きます

ほとんどの場合、正常に動作します。

そして、末尾に「/」を付けずにurl / adminでテストし、「end」がログに記録されるのを見ることができたのに、なぜですか?

4

1 に答える 1

16

ドキュメントはこれを説明しています。

ミドルウェアクラスは、表示された順序で処理されます。CommonMiddlewareクラスはLogMiddlewareクラスより上位にあるため、最初に処理されます。URLがスラッシュで終わっていないため、リダイレクトを実行し、HttpResponseRedirectを返します。

この場合のように、要求ミドルウェアが応答を返す場合、それ以上の要求ミドルウェアクラスは処理されないため、「start」はログに記録されません。ただし、応答ミドルウェアクラスは常に処理されるため、「end」がログに記録されます。

于 2009-11-25T09:16:06.777 に答える