Comment êtes-vous censé déboguer les erreurs dans Flask? Imprimer sur la console? Des messages flash sur la page? Ou existe-t-il une option plus puissante pour comprendre ce qui se passe en cas de problème?
Il n'y a rien de magique app.run()(avec le débogage activé ou désactivé). Flask se comporte comme n'importe quelle autre application Python, vous pouvez donc le déboguer de la même manière que vous déboguez n'importe quelle application Python. Si vous souhaitez utiliser la journalisation, utilisez la journalisation. Si vous souhaitez imprimer, utilisez des impressions. Vous pouvez même utiliser un débogueur si vous le souhaitez.
Mark Hildreth
Réponses:
128
L'exécution de l'application en mode développement affichera un suivi interactif et une console dans le navigateur en cas d'erreur. Pour exécuter en mode développement, définissez la FLASK_ENV=developmentvariable d'environnement puis utilisez leflask run commande (n'oubliez pas de pointer également FLASK_APPvers 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 setau lieu d'exporter:
set FLASK_ENV=development
Pour PowerShell, utilisez $env:
$env:FLASK_ENV ="development"
Avant Flask 1.0, cela était FLASK_DEBUG=1plutôt contrôlé par la variable d'environnement.
Si vous utilisez la app.run()méthode au lieu de la flask runcommande, passez debug=Truepour activer le mode débogage.
Les traces sont également imprimées sur le terminal exécutant le serveur, quel que soit le mode de développement.
Si vous utilisez PyCharm, VS Code, etc., vous pouvez profiter de son débogueur pour parcourir le code avec des points d'arrêt. La configuration d'exécution peut pointer vers un appel de script app.run(debug=True, use_reloader=False), ou le pointer vers le venv/bin/flaskscript et l'utiliser comme vous le feriez depuis la ligne de commande. Vous pouvez laisser le rechargement désactivé, mais un rechargement tuera le contexte de débogage et vous devrez à nouveau attraper un point d'arrêt.
Vous pouvez également utiliser pdb, pudb ou un autre débogueur de terminal en appelant set_tracedans la vue où vous souhaitez démarrer le débogage.
Veillez à ne pas utiliser de blocs trop larges sauf. Entourer tout votre code d'un fourre-tout try... except...fera taire l'erreur que vous souhaitez déboguer. C'est inutile en général, puisque Flask gérera déjà les exceptions en affichant le débogueur ou une erreur 500 et en imprimant le traçage sur la console.
En fait, lorsque vous exécutez avec, debug=Truevous utilisez réellement le débogueur Werkzeug, donc ce n'est pas un soit-ou ;-)
Sean Vieira
Ha, tu as raison. Je suppose que j'aurais dû regarder setup.py de Flask pour les exigences. J'utilise une copie modifiée de celui-ci pour travailler sous GAE où vous devez initialiser Werkzeug manuellement.
bnlucas
J'ai défini app.run (debug = True), si j'imprime xyz où est-il imprimé, merci
Kimmy
L'utilisation print 'xyz'imprimera sur la console. Si vous souhaitez déboguer dans le navigateur, vous devrez forcer une erreur sur l'endroit où vous souhaitez déboguer. raise Exception('xyz'). Cela déclenchera la sortie du débogage dans la fenêtre du navigateur.
bnlucas
25
Depuis la 1.1.xdocumentation , vous pouvez activer le mode débogage en exportant une variable d'environnement vers votre invite de shell:
export FLASK_APP=/daemon/api/views.py # path to app
export FLASK_DEBUG=1
python -m flask run --host=0.0.0.0
Cette réponse serait plus utile si elle expliquait ce qu'est réellement le mode de débogage. Cela fait-il plus que permettre le débogage dans le navigateur? Malheureusement, puisque je travaille sur une API REST, cela ne m'aide pas vraiment beaucoup.
Michael Scheper
Où dois-je mettre cet extrait?
mLstudent33
1
@ mLstudent33 in a shell
Édouard Lopez
16
On peut également utiliser l' extension Flask Debug Toolbar pour obtenir des informations plus détaillées intégrées dans les pages rendues.
from flask importFlaskfrom flask_debugtoolbar importDebugToolbarExtensionimport 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>"
Pouvez-vous partager un exemple de configuration fonctionnelle? J'ai déjà défini FLASK_APP dans mon env et la configuration par défaut ne fonctionnerait pas. J'ai essayé celui-ci - pastebin.com/v8hBQ2vv et un certain nombre de permutations similaires, mais en vain.
Brandon Dube
12
Si vous souhaitez déboguer votre application flask, accédez simplement au dossier où se trouve l'application flask. N'oubliez pas d'activer votre environnement virtuel et collez les lignes dans la console, changez "mainfilename" en flask main file.
export FLASK_APP="mainfilename.py"
export FLASK_DEBUG=1
python -m flask run --host=0.0.0.0
Après avoir activé votre débogueur pour l'application flask, presque toutes les erreurs seront imprimées sur la console ou dans 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.
Ne fonctionne pas pour moi ... il continue d'afficher le mode de débogage: désactivé
Federico Gentile
3
Pour activer le mode de débogage dans flask, tapez simplement set FLASK_DEBUG=1sur votre CMDfor Windows et exportez FLASK_DEBUG=1sur Linux termial, puis redémarrez votre application et vous êtes prêt à partir !!
Vous pouvez ajouter que cette case à cocher n'est disponible que dans PyCharm Professional. Référence: jetbrains.com/help/pycharm/…
cyroxx
1
Utilisez des enregistreurs et imprimez des déclarations dans l'environnement de développement, vous pouvez opter pour une sentinelle en cas d'environnements de production.
app.run()
(avec le débogage activé ou désactivé). Flask se comporte comme n'importe quelle autre application Python, vous pouvez donc le déboguer de la même manière que vous déboguez n'importe quelle application Python. Si vous souhaitez utiliser la journalisation, utilisez la journalisation. Si vous souhaitez imprimer, utilisez des impressions. Vous pouvez même utiliser un débogueur si vous le souhaitez.Réponses:
L'exécution de l'application en mode développement affichera un suivi interactif et une console dans le navigateur en cas d'erreur. Pour exécuter en mode développement, définissez la
FLASK_ENV=development
variable d'environnement puis utilisez leflask run
commande (n'oubliez pas de pointer égalementFLASK_APP
vers votre application).Pour Linux, Mac, sous-système Linux pour Windows, Git Bash sous Windows, etc.:
Pour Windows CMD, utilisez
set
au lieu d'exporter:Pour PowerShell, utilisez
$env
:Avant Flask 1.0, cela était
FLASK_DEBUG=1
plutôt contrôlé par la variable d'environnement.Si vous utilisez la
app.run()
méthode au lieu de laflask run
commande, passezdebug=True
pour activer le mode débogage.Les traces sont également imprimées sur le terminal exécutant le serveur, quel que soit le mode de développement.
Si vous utilisez PyCharm, VS Code, etc., vous pouvez profiter de son débogueur pour parcourir le code avec des points d'arrêt. La configuration d'exécution peut pointer vers un appel de script
app.run(debug=True, use_reloader=False)
, ou le pointer vers levenv/bin/flask
script et l'utiliser comme vous le feriez depuis la ligne de commande. Vous pouvez laisser le rechargement désactivé, mais un rechargement tuera le contexte de débogage et vous devrez à nouveau attraper 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.Veillez à ne pas utiliser de blocs trop larges sauf. Entourer tout votre code d'un fourre-tout
try... except...
fera taire l'erreur que vous souhaitez déboguer. C'est inutile en général, puisque Flask gérera déjà les exceptions en affichant le débogueur ou une erreur 500 et en imprimant le traçage sur la console.la source
Vous pouvez utiliser
app.run(debug=True)
pour l' édition du débogueur Werkzeug comme mentionné ci-dessous, et j'aurais dû le savoir.la source
debug=True
vous utilisez réellement le débogueur Werkzeug, donc ce n'est pas un soit-ou ;-)print 'xyz'
imprimera sur la console. Si vous souhaitez déboguer dans le navigateur, vous devrez forcer une erreur sur l'endroit où vous souhaitez déboguer.raise Exception('xyz')
. Cela déclenchera la sortie du débogage dans la fenêtre du navigateur.Depuis la
1.1.x
documentation , vous pouvez activer le mode débogage en exportant une variable d'environnement vers votre invite de shell:la source
On peut également utiliser l' extension Flask Debug Toolbar pour obtenir des informations plus détaillées intégrées dans les pages rendues.
Démarrez l'application comme suit:
la source
Si vous utilisez Visual Studio Code, remplacez
avec
Il apparaît lorsque l'activation du débogueur interne désactive le débogueur VS Code.
la source
Si vous souhaitez déboguer votre application flask, accédez simplement au dossier où se trouve l'application flask. N'oubliez pas d'activer votre environnement virtuel et collez les lignes dans la console, changez "mainfilename" en flask main file.
Après avoir activé votre débogueur pour l'application flask, presque toutes les erreurs seront imprimées sur la console ou dans 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.
la source
Installer
python-dotenv
dans votre environnement virtuel.Créez un fichier .flaskenv dans la racine de votre projet. Par racine du projet, j'entends le dossier contenant votre fichier app.py
Dans ce fichier, écrivez ce qui suit:
Exécutez maintenant la commande suivante:
la source
Pour activer le mode de débogage dans flask, tapez simplement set
FLASK_DEBUG=1
sur votreCMD
for Windows et exportezFLASK_DEBUG=1
sur Linux termial, puis redémarrez votre application et vous êtes prêt à partir !!la source
Astuce rapide - si vous utilisez un PyCharm, accédez à
Edit Configurations
=>Configurations
et activez laFLASK_DEBUG
case à cocher, redémarrez leRun
.la source
Utilisez des enregistreurs et imprimez des déclarations dans l'environnement de développement, vous pouvez opter pour une sentinelle en cas d'environnements de production.
la source
Pour les utilisateurs Windows:
Ouvrez Powershell et cd dans le répertoire de votre projet.
Utilisez ces commandos dans Powershell, toutes les autres choses ne fonctionneront pas dans Powershell.
la source
Si vous l'exécutez localement et que vous souhaitez pouvoir parcourir le code:
python -m pdb script.py
la source