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?


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.


38

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


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

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

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.


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.


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

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!


2

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


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.


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"

-1

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

python -m pdb script.py


W ogóle nie dotyczy to aplikacji na kolby
— CornSmith
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.