Come eseguire il debug di un'app Flask


134

Come si intende eseguire il debug degli errori in Flask? Stampa sulla console? Messaggi flash alla pagina? Oppure esiste un'opzione più potente disponibile per capire cosa succede quando qualcosa va storto?


5
Non c'è nulla di magico app.run()(con il debug attivato o disattivato). Flask si comporta come qualsiasi altra applicazione Python, quindi puoi eseguire il debug nello stesso modo in cui esegui il debug di qualsiasi applicazione Python. Se si desidera utilizzare la registrazione, utilizzare la registrazione. Se si desidera stampare, utilizzare stampe. Puoi anche usare un debugger se vuoi.
Mark Hildreth,

Risposte:


128

L'esecuzione dell'app in modalità di sviluppo mostrerà un traceback interattivo e una console nel browser quando si verifica un errore. Per eseguire in modalità di sviluppo, imposta la FLASK_ENV=developmentvariabile d'ambiente quindi usa il flask runcomando (ricorda di puntare anche FLASK_APPsulla tua app).

Per Linux, Mac, Sottosistema Linux per Windows, Git Bash su Windows, ecc .:

export FLASK_APP=myapp
export FLASK_ENV=development
flask run

Per Windows CMD, utilizzare setinvece di esportare:

set FLASK_ENV=development

Per PowerShell, utilizzare $env:

$env:FLASK_ENV = "development"

Prima di Flask 1.0, invece, era controllato dalla FLASK_DEBUG=1variabile d'ambiente.

Se si utilizza il app.run()metodo anziché il flask runcomando, passare debug=Trueper abilitare la modalità debug.

I traceback vengono inoltre stampati sul terminale che esegue il server, indipendentemente dalla modalità di sviluppo.

Se stai usando PyCharm, VS Code, ecc., Puoi sfruttare il suo debugger per scorrere il codice con punti di interruzione. La configurazione di esecuzione può puntare a una chiamata di script app.run(debug=True, use_reloader=False)oppure puntare allo venv/bin/flaskscript e utilizzarlo come si farebbe dalla riga di comando. Puoi lasciare il reloader disabilitato, ma un ricaricamento ucciderà il contesto di debug e dovrai catturare di nuovo un breakpoint.

È inoltre possibile utilizzare pdb, pudb o un altro debugger terminale chiamando set_tracenella vista in cui si desidera avviare il debug.


Assicurati di non usare troppo larghi tranne i blocchi. Circondare tutto il codice con un catch-all try... except...silenzierà l'errore che si desidera eseguire il debug. In generale non è necessario, poiché Flask gestirà già le eccezioni mostrando il debugger o un errore 500 e stampando il traceback sulla console.


38

È possibile utilizzare app.run(debug=True)per la modifica del debugger Werkzeug come indicato di seguito, e avrei dovuto saperlo.


7
In realtà, quando corri con debug=Truete, stai effettivamente usando il debuger di Werkzeug, quindi non è né uno né l'altro ;-)
Sean Vieira,

Ah, hai ragione. Immagino che avrei dovuto guardare setup.py di Flask per i requisiti. Ne uso una copia modificata per lavorare con GAE in cui è necessario inizializzare Werkzeug manualmente.
bnlucas,

Ho impostato app.run (debug = True), se stampo xyz dove stampa, grazie
Kimmy,

Utilizzando print 'xyz'verrà stampato sulla console. Se si desidera eseguire il debug nel browser, sarà necessario forzare un errore nel punto in cui si desidera eseguire il debug. raise Exception('xyz'). Ciò attiverà l'output del debug nella finestra del browser.
bnlucas,

25

Dalla 1.1.xdocumentazione , è possibile abilitare la modalità debug esportando una variabile di ambiente al prompt della shell:

export FLASK_APP=/daemon/api/views.py  # path to app
export FLASK_DEBUG=1
python -m flask run --host=0.0.0.0

4
Questa risposta sarebbe più utile se spiegasse quale sia effettivamente la modalità debug. Fa di più che consentire il debug nel browser? Sfortunatamente, dal momento che sto lavorando su un'API REST, questo non mi aiuta molto.
Michael Scheper,

Dove metto quel frammento?
mLstudent33

1
@ mLstudent33 in a shell
Édouard Lopez

16

Si può anche usare l' estensione Flask Debug Toolbar per ottenere informazioni più dettagliate incorporate nelle pagine renderizzate.

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

Avviare l'applicazione come segue:

FLASK_APP=main.py FLASK_DEBUG=1 flask run

12

Se stai usando Visual Studio Code, sostituiscilo

app.run(debug=True)

con

app.run()

Appare quando si attiva il debugger interno disabilita il debugger VS Code.


3
Puoi condividere un esempio di configurazione funzionante? FLASK_APP è già definito nel mio env e la configurazione predefinita non funzionerebbe. Ho provato questo - pastebin.com/v8hBQ2vv e un numero di permutazioni simili, ma senza risultati.
Brandon Dube,

12

Se si desidera eseguire il debug dell'app Flask, basta andare alla cartella in cui si trova l'app Flask. Non dimenticare di attivare il tuo ambiente virtuale e incollare le righe nella console cambiare "mainfilename" in flask main file.

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

Dopo aver abilitato il debugger per l'app di pallone, quasi tutti gli errori verranno stampati sulla console o sulla finestra del browser. Se vuoi capire cosa sta succedendo, puoi usare semplici istruzioni di stampa o puoi anche utilizzare console.log () per il codice javascript.


6

Installa python-dotenvnel tuo ambiente virtuale.

Crea un .flaskenv nella radice del tuo progetto. Per radice del progetto, intendo la cartella che contiene il tuo file app.py

All'interno di questo file scrivi quanto segue:

FLASK_APP=myapp 
FLASK_ENV=development

Ora emetti il ​​seguente comando:

flask run

Non funziona con me ... continua a mostrare la modalità Debug: off
Federico Gentile

3

Per attivare la modalità debug in pallone devi semplicemente digitare set FLASK_DEBUG=1su CMDfor windows ed esportare FLASK_DEBUG=1su Linux termial quindi riavviare la tua app e sei a posto !!


2

Suggerimento rapido: se si utilizza un PyCharm, selezionare Edit Configurations=> Configurationse abilitare la FLASK_DEBUGcasella di controllo, riavviare Run.


2
Potresti voler aggiungere che questa casella di controllo è disponibile solo in PyCharm Professional. Riferimento: jetbrains.com/help/pycharm/…
cyroxx

1

Utilizza i logger e le istruzioni di stampa nell'ambiente di sviluppo, puoi scegliere sentinella in caso di ambienti di produzione.


1

Per utenti Windows:

Apri Powershell e cd nella directory del progetto.

Usa questi comandi in Powershell, tutte le altre cose non funzioneranno in Powershell.

$env:FLASK_APP = "app"  
$env:FLASK_ENV = "development"

-1

Se lo stai eseguendo localmente e vuoi essere in grado di scorrere il codice:

python -m pdb script.py


Questo non si applica affatto alle app di pallone
CornSmith
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.