Ich habe mich gefragt, in welcher Reihenfolge der Code ausgeführt werden würde, wenn in Django mehrere Middleware angegeben würden, also habe ich es versucht.
settings.py Auszug aus der Konfigurationsdatei
MIDDLEWARE = (
#Middle ・ ・ ・ Verschiedene Middleware,
"middleware.Middleware1",
"middleware.Middleware2",
)
middleware.py Definieren Sie zwei 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 Textilansicht
from django.http import HttpResponse
from django.views import View
class Hoge(View):
def get(self, request):
print("View")
return HttpResponse()
Das Ergebnis der Anforderung des Endpunkts, der Hoge View entspricht
M1 before
M2 before
View
M2 after
M1 after
--__call__
wird verschachtelt in der in der Konfigurationsdatei definierten Reihenfolge der Middleware ausgeführt.
Nach dem Schreiben bemerkte ich [diesen Artikel](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) hatte auch die folgende Beschreibung, die die gleiche Tatsache zeigt.
Wenn eine Anforderung gesendet wird, führt Middleware außerdem den in (2) beschriebenen Prozess in der Reihenfolge aus, in der die Einstellungen in dieser settings.py festgelegt sind. Andererseits werden die in (3) beschriebenen Prozesse in umgekehrter Reihenfolge ausgeführt. In einigen Fällen ist es daher erforderlich, diese Reihenfolge beim Einstellen zu beachten.
(Ich verstehe, wie es verschachtelt ist, also ist es okay ...)
Recommended Posts