Depuración de errores de la aplicación¶
En producción¶
No ejecute el servidor de desarrollo, ni habilite el depurador incorporado, en un entorno de producción. El depurador permite ejecutar código Python arbitrario desde el navegador. Está protegido por un pin, pero no se debe confiar en eso para la seguridad.
Utiliza una herramienta de registro de errores, como Sentry, como se describe en Herramientas de registro de errores, o activa el registro y las notificaciones como se describe en Registro.
Si tiene acceso al servidor, podría añadir algún código para iniciar un depurador externo si request.remote_addr
coincide con su IP. Algunos depuradores IDE también tienen un modo remoto para que los puntos de interrupción en el servidor puedan ser interactuados localmente. Habilite un depurador sólo temporalmente.
El depurador incorporado¶
El servidor de desarrollo incorporado de Werkzeug proporciona un depurador que muestra un rastreo interactivo en el navegador cuando se produce un error no manejado durante una solicitud. Este depurador sólo debe utilizarse durante el desarrollo.
Advertencia
El depurador permite ejecutar código Python arbitrario desde el navegador. Está protegido por un pin, pero sigue representando un riesgo de seguridad importante. No ejecute el servidor de desarrollo o el depurador en un entorno de producción.
The debugger is enabled by default when the development server is run in debug mode.
$ flask --app hello run --debug
When running from Python code, passing debug=True
enables debug mode, which is
mostly equivalent.
app.run(debug=True)
Servidor de desarrollo and Interfaz de línea de comandos have more information about running the debugger and debug mode. More information about the debugger can be found in the Werkzeug documentation.
Depuradores externos¶
Los depuradores externos, como los proporcionados por los IDEs, pueden ofrecer una experiencia de depuración más potente que el depurador incorporado. También pueden utilizarse para recorrer el código durante una solicitud antes de que se produzca un error, o si no se produce ningún error. Algunos incluso tienen un modo remoto para que puedas depurar el código que se ejecuta en otra máquina.
When using an external debugger, the app should still be in debug mode, otherwise Flask turns unhandled errors into generic 500 error pages. However, the built-in debugger and reloader should be disabled so they don’t interfere with the external debugger.
$ flask --app hello run --debug --no-debugger --no-reload
Cuando se ejecuta desde Python:
app.run(debug=True, use_debugger=False, use_reloader=False)
Disabling these isn’t required, an external debugger will continue to work with the following caveats.
If the built-in debugger is not disabled, it will catch unhandled exceptions before the external debugger can.
If the reloader is not disabled, it could cause an unexpected reload if code changes during a breakpoint.
The development server will still catch unhandled exceptions if the built-in debugger is disabled, otherwise it would crash on any error. If you want that (and usually you don’t) pass
passthrough_errors=True
toapp.run
.app.run( debug=True, passthrough_errors=True, use_debugger=False, use_reloader=False )