在Flask 0.11中flask
,引入了CLI。docs和changelog都建议这样做。
从Flask 0.11开始,有多种内置方法来运行开发服务器。最好的一个是flask命令行实用程序,但是您也可以继续使用该
Flask.run()
方法。命令行
强烈建议使用flask命令行脚本(命令行界面)进行开发,因为由于其加载应用程序的方式,它提供了卓越的重新加载体验。基本用法是这样的:
$ export FLASK_APP=my_application $ export FLASK_DEBUG=1 $ flask run
更新日志:
- 添加
flask
了flask.cli
用于通过单击CLI系统启动本地调试服务器的模块。与旧flask.run()
方法相比,建议使用此方法,因为它采用不同的设计,因此可以更快,更可靠地工作,并且可以替代Flask-Script
。
到目前为止,我还没有注意到这种“高级重装体验”。我看不到在自定义脚本上使用CLI的意义。
如果使用Flask.run
,我只需编写一个python文件:
#!/usr/bin/env python3
from my_app import app
if __name__ == '__main__':
app.run(debug=True)
如果使用CLI,则必须指定环境变量。在CLI文档中声明可以将其集成到activate
virtualenvwrapper脚本中。我个人认为这是应用程序的一部分,并认为它应该在版本控制下。las,需要一个shell脚本:
#!/usr/bin/env bash
export FLASK_APP=my_app:app
export FLASK_DEBUG=1
flask run
当然,任何Windows用户开始协作后,都将附带一个附加的bat脚本。
同样,第一个选项允许在启动实际应用之前使用Python编写的设置。
例如,这允许
- 在Python中解析命令行参数
- 在运行应用程序之前设置日志记录
他们似乎在提倡添加自定义命令。我看不出为什么这比编写简单的Python脚本更好,为什么可以通过入口点公开这些脚本。
通过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
在通过CLI:使用配置的记录器时记录输出示例:请注意,在此过程中无法足够早地设置根记录器。
$ ./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
我的实际问题很简单:
为什么建议使用烧瓶CLI Flask.run
?