4

我写了一个这样的中间件:

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。

如果请求中间件返回响应,如本例所示,则不会再处理请求中间件类,因此不会记录“开始”。但是,总是会处理响应中间件类,因此会记录“结束”。

于 2009-11-25T09:16:06.777 回答