En el matraz 0.11 flask
se introdujo un CLI. Tanto los documentos como el registro de cambios indican que esto se recomienda.
Documentos del servidor de desarrollo :
A partir de Flask 0.11, hay varias formas integradas de ejecutar un servidor de desarrollo. La mejor es la utilidad de línea de comando del matraz , pero también puede continuar usando el
Flask.run()
método.Línea de comando
La secuencia de comandos de la línea de comandos del matraz (Interfaz de línea de comandos) se recomienda encarecidamente para el desarrollo, ya que proporciona una experiencia de recarga superior debido a cómo carga la aplicación. El uso básico es así:
$ export FLASK_APP=my_application $ export FLASK_DEBUG=1 $ flask run
- Se agregó
flask
elflask.cli
módulo para iniciar el servidor de depuración local a través del sistema CLI de clic. Esto se recomienda sobre elflask.run()
método anterior , ya que funciona más rápido y más confiable debido a un diseño diferente y también reemplazaFlask-Script
.
Hasta ahora no noté esta "experiencia de recarga superior". No veo el punto de usar la CLI sobre un script personalizado.
Si lo uso Flask.run
, simplemente escribiría un archivo de Python:
#!/usr/bin/env python3
from my_app import app
if __name__ == '__main__':
app.run(debug=True)
Si usa la CLI, uno tendría que especificar variables de entorno. En los documentos de la CLI se afirma que esto se puede integrar en el activate
script de virtualenvwrapper. Personalmente considero que esto es parte de la aplicación y creo que debería estar bajo control de versiones. Por desgracia, se necesita un script de shell:
#!/usr/bin/env bash
export FLASK_APP=my_app:app
export FLASK_DEBUG=1
flask run
Por supuesto, esto irá acompañado de un script de murciélago adicional tan pronto como los usuarios de Windows comiencen a colaborar.
Además, la primera opción permite la configuración escrita en Python antes de iniciar la aplicación real.
Esto permite por ejemplo
- analizar los argumentos de la línea de comandos en Python
- configurar el registro antes de ejecutar la aplicación
Parecen promover que es posible agregar comandos personalizados. No veo por qué esto es mejor que escribir scripts Python simples, opcionalmente expuestos a través de puntos de entrada.
Ejemplo de salida de registro cuando se usa un registrador configurado usando el script de ejecución de Python:
$ ./run.py
DEBUG 21:51:22 main.py:95) Configured logging
INFO 21:51:22 _internal.py:87) * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
INFO 21:51:22 _internal.py:87) * Restarting with inotify reloader
DEBUG 21:51:22 main.py:95) Configured logging
WARNING 21:51:22 _internal.py:87) * Debugger is active!
INFO 21:51:22 _internal.py:87) * Debugger pin code: 263-225-431
DEBUG 21:51:25 inotify_buffer.py:61) in-event <InotifyEvent: src_path=b'my_app/main.py', wd=272, mask=IN_MODIFY, cookie=0, name=b'main.py'>
DEBUG 21:51:25 inotify_buffer.py:61) in-event <InotifyEvent: src_path=b'my_app/main.py', wd=272, mask=IN_MODIFY, cookie=0, name=b'main.py'>
INFO 21:51:25 _internal.py:87) * Detected change in 'my_app/main.py', reloading
INFO 21:51:26 _internal.py:87) * Restarting with inotify reloader
DEBUG 21:51:26 main.py:95) Configured logging
WARNING 21:51:26 _internal.py:87) * Debugger is active!
INFO 21:51:26 _internal.py:87) * Debugger pin code: 263-225-431
Ejemplo de salida de registro cuando se usa un registrador configurado usando la CLI: observe que el registrador raíz no se pudo configurar lo suficientemente temprano en el proceso.
$ ./run.sh
* Serving Flask app "appsemble.api.main:app"
* Forcing debug mode on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with inotify reloader
DEBUG 21:51:33 main.py:95) Configured logging
* Debugger is active!
* Debugger pin code: 187-758-498
DEBUG 21:51:34 main.py:95) Configured logging
DEBUG 21:51:37 inotify_buffer.py:61) in-event <InotifyEvent: src_path=b'my_app/main.py', wd=272, mask=IN_MODIFY, cookie=0, name=b'main.py'>
DEBUG 21:51:37 inotify_buffer.py:61) in-event <InotifyEvent: src_path=b'my_app/main.py', wd=272, mask=IN_MODIFY, cookie=0, name=b'main.py'>
* Detected change in 'my_app/main.py', reloading
INFO 21:51:37 _internal.py:87) * Detected change in 'my_app/main.py', reloading
* Restarting with inotify reloader
INFO 21:51:38 _internal.py:87) * Restarting with inotify reloader
* Debugger is active!
* Debugger pin code: 187-758-498
DEBUG 21:51:38 main.py:95) Configured logging
Mi pregunta real es simplemente:
¿Por qué se recomienda la CLI del matraz Flask.run
?
FLASK_APP
? ¿Es eso intrínseco a cómo funciona esto? Tengo curiosidad por quéflask run
no acepta lo mismo como argumento, lo que facilitaría la incorporación de los recién llegados. Gracias.