wake-up-neo.com

So debuggen Sie eine Flask-App

Wie sollen Sie Fehler in Flask debuggen? Auf die Konsole drucken? Flash-Nachrichten zur Seite? Oder gibt es eine leistungsfähigere Option, um herauszufinden, was passiert, wenn etwas schief geht?

71
Kimmy

Wenn Sie die App im Entwicklungsmodus ausführen, wird im Browser ein interaktives Traceback und eine Konsole angezeigt, wenn ein Fehler auftritt. Legen Sie für die Ausführung im Entwicklungsmodus die Umgebungsvariable FLASK_ENV=development fest, und verwenden Sie dann den Befehl flask run (denken Sie daran, auch FLASK_APP auf Ihre App zu verweisen).

Für Linux, Mac, Linux Subsystem für Windows, Git Bash unter Windows usw.:

export FLASK_APP=myapp
export FLASK_ENV=development
flask run

Verwenden Sie für Windows CMD anstelle des Exports set:

set FLASK_ENV=development

Verwenden Sie für PowerShell $env:

$env:FLASK_ENV = "development"

Vor Flask 1.0 wurde dies stattdessen von der Umgebungsvariable FLASK_DEBUG=1 gesteuert.

Wenn Sie die app.run()-Methode anstelle des flask run-Befehls verwenden, übergeben Sie debug=True, um den Debug-Modus zu aktivieren.

Tracebacks werden unabhängig vom Entwicklungsmodus auch an das Terminal gesendet, auf dem der Server ausgeführt wird.

Wenn Sie PyCharm, VS Code usw. verwenden, können Sie den Debugger dazu verwenden, den Code mit Haltepunkten schrittweise durchzugehen. Die Laufkonfiguration kann auf ein Skript verweisen, das app.run(debug=True, use_reloader=False) aufruft, oder auf das Skript venv/bin/flask und es wie von der Befehlszeile aus verwenden. Sie können den Reloader deaktiviert lassen, aber ein Reload-Vorgang bricht den Debugging-Kontext ab und Sie müssen einen Haltepunkt erneut abrufen.

Sie können auch pdb, pudb oder einen anderen Terminal-Debugger verwenden, indem Sie set_trace in der Ansicht aufrufen, in der Sie mit dem Debugging beginnen möchten.


Stellen Sie sicher, dass Sie nicht zu breite Blöcke verwenden, außer für Blöcke. Wenn Sie Ihren gesamten Code mit einem Catch-All try... except... umgeben, wird der Fehler, den Sie debuggen möchten, stummgeschaltet. Im Allgemeinen ist dies nicht erforderlich, da Flask Ausnahmen bereits behandelt, indem der Debugger oder ein Fehler 500 angezeigt und das Traceback auf die Konsole gedruckt wird.

81
davidism

Sie können app.run(debug=True) für den Werkzeug Debuggeredit verwenden, wie unten erwähnt, und ich hätte es wissen müssen.

19
bnlucas

In der 0.11-Dokumentation können Sie den Debug-Modus aktivieren, indem Sie eine Umgebungsvariable exportieren:

export FLASK_APP=/daemon/api/views.py  # path to app
export FLASK_DEBUG=1
python -m flask run --Host=0.0.0.0
9
Édouard Lopez

Ersetzen Sie bei Verwendung von Visual Studio Code

app.run(debug=True)

mit

app.run()

Es erscheint, wenn der interne Debugger aktiviert wird, der VS-Code-Debugger deaktiviert wird.

7
Eman4real

Sie können auch die Erweiterung Flask Debug Toolbar verwenden, um detailliertere Informationen in gerenderten Seiten anzuzeigen.

from flask import Flask
from flask_debugtoolbar import DebugToolbarExtension
import logging

app = Flask(__name__)
app.debug = True
app.secret_key = 'development key'

toolbar = DebugToolbarExtension(app)

@app.route('/')
def index():
    logging.warning("See this message in Flask Debug Toolbar!")
    return "<html><body></body></html>"

Starten Sie die Anwendung wie folgt:

FLASK_APP=main.py FLASK_DEBUG=1 flask run
7
turdus-merula

Schneller Tipp - Wenn Sie einen PyCharm verwenden, gehen Sie zu Edit Configurations => Configurations und aktivieren Sie das Kontrollkästchen FLASK_DEBUG. Starten Sie die Run erneut. 

1
Sgryt87

Wenn Sie Ihre Flak-App debuggen möchten, gehen Sie einfach zu dem Ordner, in dem sich die Flaschen-App befindet. Vergessen Sie nicht, Ihre virtuelle Umgebung zu aktivieren, und fügen Sie die Zeilen in der Konsole ein.

export FLASK_APP="mainfilename.py"
export FLASK_DEBUG=1
python -m flask run --Host=0.0.0.0

Nachdem Sie den Debugger für die Flaschen-App aktiviert haben, wird fast jeder Fehler auf der Konsole oder im Browserfenster gedruckt .. Wenn Sie wissen möchten, was passiert, können Sie einfache Druckanweisungen verwenden oder auch console.log () für Javascript-Code.

1
omkar yadav

Wenn Sie es lokal ausführen und den Code schrittweise ausführen möchten:

python -m pdb script.py

0
rstackhouse

Installieren Sie python-dotenv in Ihrer virtuellen Umgebung.

Erstellen Sie eine .flaskenv-Datei in Ihrem Projektstamm. Mit Projektstamm ist der Ordner gemeint, in dem sich Ihre Datei app.py befindet

Schreiben Sie in diese Datei Folgendes:

FLASK_APP=myapp 
FLASK_ENV=development

Geben Sie nun den folgenden Befehl ein:

flask run
0
Tony

Verwenden Sie Logger und Druckanweisungen in der Entwicklungsumgebung. In Produktionsumgebungen können Sie sich für einen Wachposten entscheiden.

0
thisisayush