Cómo depurar una aplicación Flask

134

¿Cómo se debe depurar los 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?

Kimmy
fuente
55
No hay nada mágico app.run()(ya sea con la depuración activada o desactivada). Flask se comporta como cualquier otra aplicación de Python, por lo que puede depurarlo de la misma manera que depura cualquier aplicación de Python. Si desea usar el registro, use el registro. Si desea imprimir, use impresiones. Incluso puede usar un depurador si lo desea.
Mark Hildreth

Respuestas:

128

La ejecución de la aplicación en modo de desarrollo mostrará un rastreo interactivo y una consola en el navegador cuando haya un error. Para ejecutar en modo de desarrollo, configure la FLASK_ENV=developmentvariable de entorno y luego use el flask runcomando (recuerde señalarFLASK_APP a su aplicació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 en setlugar de exportar:

set FLASK_ENV=development

Para PowerShell, use $env:

$env:FLASK_ENV = "development"

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

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

Las trazas 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 app.run(debug=True, use_reloader=False), o apuntarla a la venv/bin/flasksecuencia de comandos y usarla como lo haría desde la línea de comandos. Puede dejar el recargador deshabilitado, pero una recarga matará el contexto de depuración y deberá volver a tomar un punto de interrupción.

También puede usar pdb, pudb u otro depurador de terminal llamando set_tracea la vista donde desea comenzar la depuración.


Asegúrese de no usar demasiado ancho, excepto los bloques. 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á las excepciones mostrando el depurador o un error 500 e imprimiendo el rastreo en la consola.

davidismo
fuente
38

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

bnlucas
fuente
77
En realidad, cuando corres debug=True, en realidad estás usando el depurador Werkzeug, por lo que no es uno u otro;
Sean Seanira
Ja, tienes razón. Supongo que debería haber mirado el archivo setup.py de Flask para conocer los requisitos. Utilizo una copia modificada para trabajar en GAE donde debe inicializar Werkzeug manualmente.
bnlucas
He configurado app.run (debug = True), si imprimo xyz donde imprime, gracias
Kimmy
El uso print 'xyz'se imprimirá en la consola. Si desea depurar en el navegador, deberá forzar un error en el lugar donde desea depurar. raise Exception('xyz'). Esto activará la depuración a la salida en la ventana del navegador.
bnlucas
25

Desde la 1.1.xdocumentació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
Édouard Lopez
fuente
44
Esta respuesta sería más útil si explicara qué es realmente el modo de depuración. ¿Hace más que permitir la depuración en el navegador? Desafortunadamente, dado que estoy trabajando en una API REST, eso realmente no me ayuda mucho.
Michael Scheper el
¿Dónde pongo ese fragmento?
mLstudent33
1
@ mLstudent33 en una concha
Édouard Lopez
16

También se puede usar la barra de herramientas de depuración de frascos extensión para obtener información más detallada incrustada en 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
turdus-merula
fuente
12

Si está utilizando Visual Studio Code, reemplace

app.run(debug=True)

con

app.run()

Aparece cuando se enciende el depurador interno deshabilita el depurador de VS Code.

Eman4real
fuente
3
¿Puedes compartir un ejemplo de una configuración de trabajo? Ya tengo FLASK_APP definido en mi env y la configuración predeterminada no funcionaría. Probé este: pastebin.com/v8hBQ2vv y varias permutaciones similares, pero fue en vano.
Brandon Dube
12

Si desea depurar su aplicación de matraz, simplemente vaya a la carpeta donde está la aplicación de matraz. No olvides activar tu entorno virtual y pegar las líneas en la consola, cambiar "mainfilename" al archivo principal del frasco.

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á sucediendo, puede usar declaraciones de impresión simples o también puede usar console.log () para el código javascript.

omkar yadav
fuente
6

Instalar python-dotenven su entorno virtual.

Cree un .flaskenv en la raíz de su proyecto. Por raíz del proyecto, me refiero a la carpeta que tiene su archivo app.py

Dentro de este archivo escriba lo siguiente:

FLASK_APP=myapp 
FLASK_ENV=development

Ahora emita el siguiente comando:

flask run
MSS
fuente
No me funciona ... sigue mostrando el modo de depuración: apagado
Federico Gentile
3

Para activar el modo de depuración en el matraz, simplemente escriba set FLASK_DEBUG=1en su CMDpara Windows y exporte FLASK_DEBUG=1en el terminal de Linux, luego reinicie su aplicación y ¡listo!

Zahid
fuente
2

Consejo rápido: si utiliza un PyCharm, vaya a Edit Configurations=> Configurationsy active la FLASK_DEBUGcasilla de verificación, reinicie el Run.

Sgryt87
fuente
2
Es posible que desee agregar que esta casilla de verificación solo está disponible en PyCharm Professional. Referencia: jetbrains.com/help/pycharm/…
cyroxx
1

Utilice los registradores y las declaraciones impresas en el Entorno de desarrollo, puede ir a centinela en caso de entornos de producción.

thisisayush
fuente
1

Para usuarios de Windows:

Abra Powershell y cd en el directorio de su proyecto.

Use estos comandos en Powershell, todas las demás cosas no funcionarán en Powershell.

$env:FLASK_APP = "app"  
$env:FLASK_ENV = "development"
sn98
fuente
-1

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

python -m pdb script.py

rstackhouse
fuente
Esto no se aplica a las aplicaciones de matraz en absoluto
CornSmith