Cómo depurar una aplicación Flask
¿Cómo se supone que se deben depurar errores en Flask? ¿Imprimir en la consola? ¿Mensajes flash a la página? ¿O hay una opción más poderosa disponible para descubrir qué sucede cuando algo sale mal?
Al ejecutar la aplicación en modo de depuración se mostrará un rastreo interactivo y una consola en el navegador cuando haya un error. A partir de Flask 2.2, para ejecutar en modo de depuración, pase las opciones --app
y --debug
al flask
comando.
$ flask --app example --debug run
Antes de Flask 2.2, esto estaba controlado por la FLASK_ENV=development
variable de entorno. Aún puedes usar FLASK_APP
y FLASK_DEBUG=1
en lugar de las opciones anteriores.
Para Linux, Mac, subsistema Linux para Windows, Git Bash en Windows, etc.:
$ export FLASK_APP=example
$ export FLASK_DEBUG=1
$ flask run
Para Windows CMD, use set
en lugar de exportar:
set FLASK_DEBUG=1
Para PowerShell, utilice $env
:
$env:FLASK_DEBUG = "1"
Si está utilizando el app.run()
método en lugar del flask run
comando, pase debug=True
para habilitar el modo de depuración.
Los rastreos 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 una secuencia de comandos que llama a app.run(debug=True, use_reloader=False)
, o apuntar a la venv/bin/flask
secuencia de comandos y utilizarla como lo haría desde la línea de comandos. Puede dejar el recargador deshabilitado, pero una recarga eliminará 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 set_trace
a la vista donde desea comenzar a depurar.
Asegúrese de no utilizar bloques demasiado anchos, excepto. Rodear todo su código con un comodín try... except...
silenciará el error que desea depurar. En general, es innecesario, ya que Flask ya manejará excepciones mostrando el depurador o un error 500 e imprimiendo el rastreo en la consola.
Puede usarlo app.run(debug=True)
para la edición del Werkzeug Debugger como se menciona a continuación, y debería haberlo sabido.
Desde la 1.1.x
documentación , puede habilitar el modo de depuración exportando una variable de entorno a su indicador 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
También se puede utilizar 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 "<html><body></body></html>"
Inicie la aplicación de la siguiente manera:
FLASK_APP=main.py FLASK_DEBUG=1 flask run
Si está utilizando Visual Studio Code, reemplace
app.run(debug=True)
con
app.run()
Aparece cuando al activar el depurador interno se desactiva el depurador de VS Code.