【问题标题】:django middware only "process_response" when miss trailing slash缺少斜杠时,django中间件只有“process_response”
【发布时间】:2009-11-25 07:27:55
【问题描述】:

我写过这样的中间件:

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”记录,为什么?

【问题讨论】:

    标签: django middleware


    【解决方案1】:

    documentation 解释了这一点。

    中间件类按照它们出现的顺序进行处理。 CommonMiddleware 类比您的 LogMiddleware 类更高,因此首先处理。它执行重定向,因为您的 URL 不以斜杠结尾,因此返回一个 HttpResponseRedirect。

    如果请求中间件返回响应,在这种情况下,不会再处理请求中间件类,因此不会记录“开始”。但是,响应中间件类总是会被处理,因此会记录“end”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-12
      • 2017-03-01
      • 2019-01-11
      • 2012-08-15
      • 1970-01-01
      • 1970-01-01
      • 2017-03-23
      相关资源
      最近更新 更多