Flask - Der benutzerdefinierte Decorator unterbricht das Routing

8

Ich habe die folgenden Flask-Routen und einen benutzerdefinierten Helfer:

%Vor%

Ich würde erwarten, dass eine GET-Anfrage an / test etwas wie {"result":"Test success"} zurückgibt, aber das ist nicht der Fall. Stattdessen scheint jede Anfrage der letzten Route zu entsprechen, d. H.% Co_de%. Warum?

Ich frage mich, ob dies durch einen Mangel an Isolation zwischen den verschiedenen Aufrufen von home verursacht wird?

Vielen Dank im Voraus.

    
phidah 16.06.2012, 14:29
quelle

1 Antwort

11

Wie Видул Петров gesagt hat, besteht die Lösung darin, functools.wraps zu verwenden:

%Vor%

Der Grund dafür ist, dass das Routing-System von Flask URLs auf "Endpunkte" und dann auf Endpunkte zum Anzeigen von Funktionen ordnet. Der Endpunkt wird standardmäßig auf das Attribut __name__ der Ansichtsfunktion gesetzt. In diesem Fall wurde die dekorierte Funktion an app.route übergeben, sodass der Endpunkt für beide Regeln create_json_response war und die letzte für diesen Endpunkt definierte Ansicht in beiden Fällen verwendet wurde.

functools.wraps übernimmt die __name__ (und andere Attribute) von der ursprünglichen Funktion und behebt diese. Es ist immer eine gute Idee, es in dekorierten Wrapper zu verwenden.

    
Simon Sapin 27.07.2012 10:50
quelle

Tags und Links