Jak debugować aplikację Flask

134

Jak zamierzasz debugować błędy w Flasku? Wydrukować na konsoli? Wiadomości bezpośrednie na stronie? A może jest dostępna bardziej zaawansowana opcja, aby dowiedzieć się, co się dzieje, gdy coś pójdzie nie tak?

Kimmy
źródło
5
Nie ma w tym nic magicznego app.run()(zarówno z włączonym, jak i wyłączonym debugowaniem). Flask zachowuje się jak każda inna aplikacja w Pythonie, więc możesz ją debugować w ten sam sposób, w jaki debugujesz dowolną aplikację w Pythonie. Jeśli chcesz korzystać z logowania, użyj logowania. Jeśli chcesz drukować, używaj odbitek. Jeśli chcesz, możesz nawet użyć debugera.
Mark Hildreth

Odpowiedzi:

128

Uruchomienie aplikacji w trybie programistycznym spowoduje wyświetlenie interaktywnego śledzenia i konsoli w przeglądarce, gdy wystąpi błąd. Aby uruchomić w trybie programistycznym, ustaw FLASK_ENV=developmentzmienną środowiskową, a następnie użyj flask runpolecenia (pamiętaj, aby wskazać FLASK_APPrównież swoją aplikację).

W przypadku systemów Linux, Mac, Linux Subsystem dla Windows, Git Bash w systemie Windows itp .:

export FLASK_APP=myapp
export FLASK_ENV=development
flask run

W przypadku Windows CMD setzamiast eksportu użyj :

set FLASK_ENV=development

W przypadku programu PowerShell użyj $env:

$env:FLASK_ENV = "development"

Przed wersją Flask 1.0 było to kontrolowane przez FLASK_DEBUG=1zmienną środowiskową.

Jeśli używasz app.run()metody zamiast flask runpolecenia, przekaż, debug=Trueaby włączyć tryb debugowania.

Dane śledzenia są również drukowane na terminalu, na którym działa serwer, niezależnie od trybu programowania.

Jeśli używasz PyCharm, VS Code itp., Możesz skorzystać z jego debugera, aby przejść przez kod z punktami przerwania. Konfiguracja uruchamiania może wskazywać na wywołanie skryptu app.run(debug=True, use_reloader=False)lub wskazywać go na venv/bin/flaskskrypt i używać go tak, jak z wiersza poleceń. Możesz pozostawić przeładowanie wyłączone, ale przeładowanie zabije kontekst debugowania i będziesz musiał ponownie złapać punkt przerwania.

Możesz także użyć pdb, pudb lub innego debuggera terminala, wywołując set_tracewidok, w którym chcesz rozpocząć debugowanie.


Pamiętaj, aby nie używać zbyt szerokich z wyjątkiem bloków. Otoczenie całego kodu znakiem catch-all try... except...spowoduje wyciszenie błędu, który chcesz debugować. Ogólnie jest to niepotrzebne, ponieważ Flask będzie już obsługiwał wyjątki, pokazując debugger lub błąd 500 i drukując dane śledzenia do konsoli.

dawidyzm
źródło
38

Możesz użyć app.run(debug=True)do edycji Werkzeug Debugger, jak wspomniano poniżej, i powinienem był wiedzieć.

bnlucas
źródło
7
Właściwie, kiedy debug=Truebiegasz z tobą, faktycznie używasz debugera Werkzeug, więc nie jest to albo-albo ;-)
Sean Vieira
Ha, masz rację. Myślę, że powinienem był spojrzeć na plik setup.py Flaska, aby sprawdzić wymagania. Używam zmodyfikowanej kopii do pracy pod GAE, gdzie trzeba ręcznie zainicjować Werkzeug.
bnlucas
Ustawiłem app.run (debug = True), jeśli wydrukuję xyz, gdzie to drukuje, dzięki
Kimmy
Użycie print 'xyz'spowoduje wydrukowanie na konsoli. Jeśli chcesz debugować w przeglądarce, będziesz musiał wymusić błąd w miejscu, w którym chcesz debugować. raise Exception('xyz'). Spowoduje to wyświetlenie debugowania w oknie przeglądarki.
bnlucas
25

W 1.1.xdokumentacji możesz włączyć tryb debugowania, eksportując zmienną środowiskową do zachęty powłoki:

export FLASK_APP=/daemon/api/views.py  # path to app
export FLASK_DEBUG=1
python -m flask run --host=0.0.0.0
Édouard Lopez
źródło
4
Ta odpowiedź byłaby bardziej pomocna, gdyby wyjaśniła, czym właściwie jest tryb debugowania. Czy to więcej niż umożliwia debugowanie w przeglądarce? Niestety, ponieważ pracuję nad REST API, to niewiele mi pomaga.
Michael Scheper,
Gdzie umieścić ten fragment?
mLstudent33
1
@ mLstudent33 w skorupce
Édouard Lopez
15

Można również użyć rozszerzenia Flask Debug Toolbar, aby uzyskać bardziej szczegółowe informacje osadzone na renderowanych stronach.

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>"

Uruchom aplikację w następujący sposób:

FLASK_APP=main.py FLASK_DEBUG=1 flask run
turdus-merula
źródło
12

Jeśli używasz Visual Studio Code, zamień

app.run(debug=True)

z

app.run()

Pojawia się po włączeniu wewnętrznego debugera wyłącza debuger VS Code.

Eman4real
źródło
3
Czy możesz podzielić się przykładem działającej konfiguracji? Mam już zdefiniowaną FLASK_APP w moim env i domyślna konfiguracja nie będzie działać. Wypróbowałem ten - pastebin.com/v8hBQ2vv i kilka podobnych permutacji, ale bezskutecznie.
Brandon Dube
12

Jeśli chcesz debugować aplikację flask, po prostu przejdź do folderu, w którym znajduje się aplikacja flask. Nie zapomnij aktywować swojego wirtualnego środowiska i wkleić linie w konsoli zmień "mainfilename" na główny plik flask.

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

Po włączeniu debugera dla aplikacji flask prawie każdy błąd zostanie wydrukowany na konsoli lub w oknie przeglądarki. Jeśli chcesz dowiedzieć się, co się dzieje, możesz użyć prostych instrukcji print lub też użyć console.log () dla kodu javascript.

omkar yadav
źródło
5

Zainstaluj python-dotenvw swoim wirtualnym środowisku.

Utwórz plik .flaskenv w katalogu głównym projektu. Przez katalog główny projektu rozumiem folder zawierający plik app.py

Wewnątrz tego pliku napisz:

FLASK_APP=myapp 
FLASK_ENV=development

Teraz wydaj następujące polecenie:

flask run
MSS
źródło
Dla mnie nie działa ... ciągle pokazuje Tryb debugowania: wyłączony
Federico Gentile
3

Aby aktywować tryb debugowania w kolbie, po prostu wpisz set FLASK_DEBUG=1na swoim CMDdla systemu Windows i wyeksportuj FLASK_DEBUG=1na terminalu Linux, a następnie uruchom ponownie aplikację i gotowe!

Zahid
źródło
2

Szybka wskazówka - jeśli używasz PyCharm, przejdź do Edit Configurations=> Configurationsi włącz FLASK_DEBUGpole wyboru, uruchom ponownie Run.

Sgryt87
źródło
2
Warto dodać, że to pole wyboru jest dostępne tylko w PyCharm Professional. Źródła
cyroxx
1

Korzystaj z loggerów i drukuj instrukcje w środowisku programistycznym, możesz przejść do wartownika w przypadku środowisk produkcyjnych.

thisisayush
źródło
1

Użytkownicy systemu Windows:

Otwórz program PowerShell i przejdź do katalogu projektu.

Użyj tych poleceń w Powershell, wszystkie inne rzeczy nie będą działać w Powershell.

$env:FLASK_APP = "app"  
$env:FLASK_ENV = "development"
sn98
źródło
-1

Jeśli uruchamiasz go lokalnie i chcesz mieć możliwość przechodzenia przez kod:

python -m pdb script.py

rstackhouse
źródło
W ogóle nie dotyczy to aplikacji na kolby
CornSmith