Je me demandais dans quel ordre le code serait exécuté si plusieurs middlewares étaient spécifiés dans Django, alors je l'ai essayé.
settings.py Extrait du fichier de configuration
MIDDLEWARE = (
#・ ・ ・ ・ Divers middleware,
"middleware.Middleware1",
"middleware.Middleware2",
)
middleware.py Définir deux middleware
class Middleware1:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
print("M1 before")
response = self.get_response(request)
print("M1 after")
return response
class Middleware2:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
print("M2 before")
response = self.get_response(request)
print("M2 after")
return response
hoge.py Vue textile
from django.http import HttpResponse
from django.views import View
class Hoge(View):
def get(self, request):
print("View")
return HttpResponse()
Le résultat de la demande du point final correspondant à Hoge View
M1 before
M2 before
View
M2 after
M1 after
--__call__
est exécuté de manière imbriquée dans l'ordre du middleware défini dans le fichier de configuration.
Après avoir écrit, j'ai remarqué [cet article](https://qiita.com/shirakiya/items/1503eaffe81f91af5b9d#middleware%E3%82%92%E5%88%A9%E7%94%A8%E3% 81% 99% E3% 82% 8B% E8% A8% AD% E5% AE% 9A% E3% 82% 92% E8% BF% BD% E5% 8A% A0% E3% 81% 99% E3% 82% 8B) avait également la description suivante montrant le même fait.
De plus, lorsqu'une requête est envoyée, Middleware exécutera le processus décrit dans (2) dans l'ordre à partir du haut de ce qui est défini dans ce settings.py. D'autre part, les processus décrits en (3) sont exécutés dans l'ordre inverse. Par conséquent, dans certains cas, il est nécessaire de tenir compte de cet ordre lors du paramétrage.
(Je comprends comment c'est imbriqué, donc ça va ...)
Recommended Posts