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
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?
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:
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)