Dans Flask 0.11, une flask
CLI a été introduite. Les documents et le journal des modifications indiquent que cela est recommandé.
Documents du serveur de développement :
À partir de Flask 0.11, il existe plusieurs façons intégrées d'exécuter un serveur de développement. Le meilleur est l' utilitaire de ligne de commande flask , mais vous pouvez également continuer à utiliser la
Flask.run()
méthode.Ligne de commande
Le script de ligne de commande flask (interface de ligne de commande) est fortement recommandé pour le développement car il offre une expérience de rechargement supérieure en raison de la façon dont il charge l'application. L'utilisation de base est la suivante:
$ export FLASK_APP=my_application $ export FLASK_DEBUG=1 $ flask run
- Ajouté
flask
et leflask.cli
module pour démarrer le serveur de débogage local via le système CLI click. Ceci est recommandé par rapport à l'ancienneflask.run()
méthode car elle fonctionne plus rapidement et plus fiable en raison d'une conception différente et remplace égalementFlask-Script
.
Jusqu'à présent, je n'ai pas remarqué cette "expérience de rechargement supérieure". Je ne vois pas l'intérêt d'utiliser la CLI sur un script personnalisé.
Si Flask.run
j'utilise, j'écrirais simplement un fichier python:
#!/usr/bin/env python3
from my_app import app
if __name__ == '__main__':
app.run(debug=True)
Si vous utilisez l'interface CLI, il faudrait spécifier des variables d'environnement. Dans la documentation CLI, il est indiqué que cela peut être intégré dans le activate
script de virtualenvwrapper. Personnellement, je considère que cela fait partie de l'application et je pense que cela devrait être sous contrôle de version. Hélas, un script shell est nécessaire:
#!/usr/bin/env bash
export FLASK_APP=my_app:app
export FLASK_DEBUG=1
flask run
Bien sûr, cela sera accompagné d'un script bat supplémentaire dès que les utilisateurs de Windows commenceront à collaborer.
La première option permet également une configuration écrite en Python avant de démarrer l'application réelle.
Cela permet par exemple
- analyser les arguments de ligne de commande en Python
- pour configurer la journalisation avant d'exécuter l'application
Ils semblent promouvoir qu'il est possible d'ajouter des commandes personnalisées. Je ne vois pas pourquoi c'est mieux que d'écrire de simples scripts Python, éventuellement exposés via des points d'entrée.
Exemple de sortie de journalisation lors de l'utilisation d'un enregistreur configuré à l'aide du script d'exécution 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
Exemple de sortie de journalisation lors de l'utilisation d'un enregistreur configuré à l'aide de l'interface CLI:, notez que l'enregistreur racine n'a pas pu être configuré suffisamment tôt dans le processus.
$ ./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
Ma vraie question est simplement:
Pourquoi la CLI Flask est-elle recommandée Flask.run
?
FLASK_APP
? Est-ce intrinsèque à la façon dont cela fonctionne? Je suis curieux de savoir pourquoiflask run
n'accepte pas la même chose comme argument, ce qui faciliterait l'intégration des nouveaux arrivants. Je vous remercie.