Warum wird nur eine Flask teardown_request-Funktion aufgerufen, wenn die Ansicht Exception auslöst?

8

Diese einfache Anwendung hat zwei teardown_request -Handler und ich würde erwarten, dass beide für jede Anfrage aufgerufen werden, egal was in der View-Implementierung passiert, wie in Dokumentation

%Vor%

Wenn ich es jedoch ausführe und Anfragen an die drei Ansichten der Reihe nach mache, bekomme ich die folgende Ausgabe:

%Vor%

Nur eine der Funktionen teardown_request wird aufgerufen, wenn eine Ausnahme, die nicht von werkzeug.exceptions.HTTPException abgeleitet ist, von der letzten Ansicht ausgelöst wird. Irgendwelche Ideen warum, oder ist das ein Fehler in der Flasche?

    
Day 15.11.2011, 19:08
quelle

1 Antwort

20

Habe gerade die Antwort selbst entdeckt.

Die Funktionen teardown_request sollen keine Antwort annehmen und eine Antwort zurückgeben, wie after_request tut es. Sie nehmen anscheinend ein Argument an, das normalerweise None ist, es sei denn, ein Exception , das nicht von HttpException stammt, wird von der Ansicht ausgelöst, in welchem ​​Fall sie das übergeben werden.

Offenbar müssen sie nicht die Ausnahme zurückgeben, sonst erhalten Sie das fehlerhafte Verhalten, das ich demonstriert habe.

Um dies zu beheben, sollten die teardown_request -Funktionen der App wie folgt aussehen:

%Vor%

Dies gibt dann die erwartete Ausgabe für alle drei Ansichten:

%Vor%

(mit dem zusätzlichen Debug-Befehl, um zu drucken, was an die teardown_request -Handler übergeben wird)

    
Day 15.11.2011, 19:56
quelle

Tags und Links