Django Middware apenas “Process_Response” quando perde a Slashing Slash
-
22-09-2019 - |
Pergunta
Eu escrevi um middware como este:
class LogMiddleware( object ):
def process_request( self, request ):
logging.debug("start")
def process_response( self, request, response ):
logging.debug("end")
return response
e eu coloquei no fundo de middleware_classes
Na maioria das vezes, funciona bem.
E quando eu testo com URL /Admin sem um " /" e eu só conseguia ver o "final" registrado, por quê?
Solução
o documentação explica isso.
As aulas de middleware são processadas na ordem em que aparecem. A classe CommonMiddleware é mais alta que a sua classe LogMiddleware, então é processada primeiro. Ele executa um redirecionamento porque seu URL não termina com uma barra, então retorna um httproSrediredirect.
Se um middleware de solicitação retornar uma resposta, como neste caso, nenhuma aula de middleware de solicitação será processada, portanto, 'Start' não será registrado. No entanto, as aulas de middleware de resposta são sempre processado, então 'end' é registrado.