Cómo depurar una aplicación Flask

¿Cómo se pretende depurar errores en Flask? Imprimir en la consola? ¿Mensajes flash a la página? ¿O hay una opción más poderosa disponible para averiguar qué está pasando cuando algo sale mal?

La ejecución de la aplicación en modo de desarrollo mostrará un seguimiento interactivo y una consola en el navegador cuando haya un error. Para ejecutar en modo de desarrollo, establezca la variable de entorno de FLASK_ENV=development luego use el comando flask run (recuerde apuntar FLASK_APP a su aplicación también).

Para Linux, Mac, subsistema de Linux para Windows, Git Bash en Windows, etc .:

 export FLASK_APP=myapp export FLASK_ENV=development flask run 

Para Windows CMD, use set lugar de exportar:

 set FLASK_ENV=development 

Para PowerShell, use $env :

 $env:FLASK_ENV = "development" 

Antes de Flask 1.0, esto estaba controlado por la variable de entorno FLASK_DEBUG=1 lugar.

Si está utilizando el método app.run() lugar del comando flask run , pase debug=True para habilitar el modo de depuración.

Los tracebacks también se imprimen en el terminal que ejecuta el servidor, independientemente del modo de desarrollo.

Si está utilizando PyCharm, VS Code, etc., puede aprovechar su depurador para recorrer el código con puntos de interrupción. La configuración de ejecución puede apuntar a un script que llama app.run(debug=True, use_reloader=False) , o venv/bin/flask al venv/bin/flask y usarlo como lo haría desde la línea de comandos. Puede dejar el recargador deshabilitado, pero una recarga anulará el contexto de depuración y tendrá que capturar un punto de interrupción nuevamente.

También puede usar pdb, pudb u otro depurador de terminal llamando a set_trace en la vista donde desea iniciar la depuración.


Asegúrate de no usar bloques demasiado anchos. Rodeando todo su código con un try... except... catch-all try... except... silenciará el error que desea depurar. En general, no es necesario, ya que Flask ya manejará las excepciones al mostrar el depurador o un error 500 e imprimir el rastreo en la consola.

Puede usar app.run(debug=True) para la edición del Depurador de Werkzeug como se menciona a continuación, y debería haberlo sabido.

Desde la documentación de 0.11 , puede habilitar el modo de depuración exportando una variable de entorno:

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

Si está utilizando el código de Visual Studio, reemplace

 app.run(debug=True) 

con

 app.run() 

Aparece cuando la activación del depurador interno desactiva el depurador de código VS.

También se puede usar la extensión Flask Debug Toolbar para obtener información más detallada incrustada en las páginas renderizadas.

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

Inicie la aplicación de la siguiente manera:

 FLASK_APP=main.py FLASK_DEBUG=1 flask run 

Si desea depurar su aplicación flak, solo vaya a la carpeta donde está la aplicación flask, no olvide activar su entorno virtual y pegue las líneas en la consola, cambie “mainfilename” al archivo principal de flask.

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

Después de habilitar su depurador para la aplicación de matraz, casi todos los errores se imprimirán en la consola o en la ventana del navegador. Si desea averiguar qué está pasando, puede usar declaraciones de impresión simples o también puede usar console.log () para el código javascript.

Si lo está ejecutando localmente y desea poder recorrer el código:

python -m pdb script.py

Sugerencia rápida: si usa un PyCharm, vaya a Edit Configurations => Configurations y active la checkbox FLASK_DEBUG , reinicie la Run .

Utilice registradores e imprima declaraciones en el entorno de desarrollo, puede optar por centinela en caso de entornos de producción.