django middleware solo “process_response” quando la signorina slash
-
22-09-2019 - |
Domanda
Ho scrivere un middware in questo modo:
class LogMiddleware( object ):
def process_request( self, request ):
logging.debug("start")
def process_response( self, request, response ):
logging.debug("end")
return response
e l'ho messo in fondo a MIDDLEWARE_CLASSES
più tempo funziona bene.
e quando prova con url / admin senza un finale "/" e ho potuto vedere solo il "fine" loggato, perché?
Soluzione
La documentazione rel="noreferrer"> spiega questo.
classi Middleware vengono elaborati nell'ordine in cui appaiono. La classe CommonMiddleware è più in alto di quanto la classe LogMiddleware, quindi viene elaborato per primo. Si esegue un reindirizzamento perché l'URL non termina con una barra, quindi restituisce un HttpResponseRedirect.
Se la richiesta middleware restituisce una risposta, come in questo caso, ulteriori classi richiesta middleware vengono elaborate, in modo da 'start' non viene registrato. Tuttavia, le classi middleware risposta sono sempre trasformati, in modo 'fine' viene registrato.