web-dev-qa-db-fra.com

Comment déboguer une application Flask

Comment voulez-vous déboguer les erreurs dans Flask? Imprimer sur la console? Messages flash sur la page? Ou existe-t-il une option plus puissante pour comprendre ce qui se passe lorsque quelque chose ne va pas?

71
Kimmy

L'exécution de l'application en mode développement affichera une trace interactive et une console dans le navigateur en cas d'erreur. Pour une exécution en mode développement, définissez la variable d'environnement FLASK_ENV=development, puis utilisez la commande flask run (n'oubliez pas de pointer également FLASK_APP sur votre application).

Pour Linux, Mac, Sous-système Linux pour Windows, Git Bash sous Windows, etc.:

export FLASK_APP=myapp
export FLASK_ENV=development
flask run

Pour Windows CMD, utilisez set au lieu de export:

set FLASK_ENV=development

Pour PowerShell, utilisez $env:

$env:FLASK_ENV = "development"

Avant Flask 1.0, cela était contrôlé par la variable d'environnement FLASK_DEBUG=1.

Si vous utilisez la méthode app.run() à la place de la commande flask run, transmettez debug=True pour activer le mode débogage.

Les retraits sont également imprimés sur le terminal exécutant le serveur, quel que soit le mode de développement.

Si vous utilisez PyCharm, VS Code, etc., vous pouvez tirer parti de son débogueur pour parcourir le code avec des points d'arrêt. La configuration d'exécution peut pointer sur un script appelant app.run(debug=True, use_reloader=False) ou le pointer sur le script venv/bin/flask et l'utiliser comme vous le feriez depuis la ligne de commande. Vous pouvez laisser le rechargeur désactivé, mais un rechargement supprimera le contexte de débogage et vous devrez attraper à nouveau un point d'arrêt.

Vous pouvez également utiliser pdb, pudb ou un autre débogueur de terminal en appelant set_trace dans la vue où vous souhaitez démarrer le débogage.


Assurez-vous de ne pas utiliser trop large sauf des blocs. Entourer tout votre code avec un try... except... fourre-tout arrêtera l'erreur que vous voulez déboguer. Cela est généralement inutile, car Flask gérera déjà les exceptions en affichant le débogueur ou une erreur 500 et en imprimant le suivi sur la console.

81
davidism

Vous pouvez utiliser app.run(debug=True) pour le Werkzeug Debuggeredit comme indiqué ci-dessous, et j'aurais dû le savoir.

19
bnlucas

A partir de la documentation 0.11 , vous pouvez activer le mode débogage en exportant une variable d'environnement:

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

Si vous utilisez du code Visual Studio, remplacez

app.run(debug=True)

avec

app.run()

Il apparaît lors de l'activation du débogueur interne désactive le débogueur du code VS.

7
Eman4real

On peut également utiliser l’extension Flask Toolbar pour obtenir des informations plus détaillées intégrées aux pages rendues.

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

Démarrez l'application comme suit:

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

Astuce - si vous utilisez un PyCharm, allez à Edit Configurations => Configurations et cochez la case FLASK_DEBUG, redémarrez la Run

1
Sgryt87

Si vous voulez déboguer votre application flak, allez simplement dans le dossier où se trouve l'application flask. N'oubliez pas d'activer votre environnement virtuel et collez les lignes dans la console, puis changez le "nom de fichier principal" en fichier principal du flacon.

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

Une fois que vous avez activé votre application de débogage pour flacon, presque toutes les erreurs sont imprimées sur la console ou sur la fenêtre du navigateur .. Si vous voulez comprendre ce qui se passe, vous pouvez utiliser des instructions d'impression simples ou vous pouvez également utiliser console.log pour le code javascript.

1
omkar yadav

Si vous l'exécutez localement et souhaitez pouvoir parcourir le code:

python -m pdb script.py

0
rstackhouse

Installez python-dotenv dans votre environnement virtuel.

Créez un fichier .flaskenv à la racine de votre projet. Par racine de projet, j'entends le dossier contenant votre fichier app.py

Dans ce fichier, écrivez ce qui suit:

FLASK_APP=myapp 
FLASK_ENV=development

Maintenant, lancez la commande suivante:

flask run
0
Tony

Utilisez des enregistreurs et des instructions d'impression dans l'environnement de développement. Vous pouvez choisir une sentinelle dans les environnements de production.

0
thisisayush