django middleware que « process_response » lorsque miss de slash
-
22-09-2019 - |
Question
J'ai écrire un middware comme ceci:
class LogMiddleware( object ):
def process_request( self, request ):
logging.debug("start")
def process_response( self, request, response ):
logging.debug("end")
return response
et je l'ai mis dans le fond de MIDDLEWARE_CLASSES
plupart du temps, il fonctionne très bien.
et quand je test avec url / admin sans fuite « / » et je ne pouvais voir que la « fin » connecté, pourquoi?
La solution
Le rel="noreferrer"> explique cela.
classes Middleware sont traitées dans l'ordre dans lequel ils apparaissent. La classe CommonMiddleware est plus haut que votre classe LogMiddleware, elle est traitée en premier. Il effectue une redirection parce que votre URL ne se termine pas par une barre oblique, donc retourne un HttpResponseRedirect.
Si un middleware de requête renvoie une réponse, comme dans ce cas, aucune autre classe de middleware de demande sont traitées, donc « start » est pas connecté. Cependant, les classes de middleware de réponse sont toujours traités, donc 'fin' est enregistré.