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ê?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top