[PYTHON] Ausführungsreihenfolge der Django Middleware

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.

Experimenteller Code

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()

Versuchsergebnis

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

Ausführungsreihenfolge der Django Middleware
Erstellen Sie Ihre eigene Django-Middleware
Django
(Hinweis) Suchreihenfolge der Vorlagendateien in Django
Aufbau des Python-Ausführungsservers (Python + uWSGI + Django + Nginx)
Django: Testen Sie eine Middleware, die von einer anderen Middleware abhängt