一、Flask-Script 已经消亡!
曾几何时 Flask-Script
一直都是配合 Flask
应用的利器,你可以在命令行启动项目,还可以配合 Flask-Migrate
做数据迁移,这两个工具一度成为 Flask
项目的必备选项:Flask 组件 Script、Flask 组件 Migrate。
但 Flask
从 0.11
开始就内置了 CLI
工具,所有连 Flask-Script
作者都觉得 Flask-Script
没必要在维护下去了。GitHub
上也已经归档了:https://github.com/smurfix/flask-script,而且明确告诉我们选择 Flask
官方的内置 CLI
工具。
作者对于 Click
引入 Flask
的意见:
回到2014年,当ArminRonacher向我介绍将Click整合进flask,我是(现在也是)拒绝的,这给Flask内核项目添加了别的依赖,我建议基于click实现命令行支持作为flask的拓展,与flask-script进行公平的竞争。你可以查看该讨论在GitHub的issue中https://github.com/smurfix/flask-script/issues/97。因此我确信,强制命令行工具基于Click是个错误,并且违反了flask的基本准则将最优秀的工具用于每一项任务。而且不幸的是,click成为flask核心的一部分使flask-script的维护者离开了,而且从github的repository来看,这个项目似乎正在缓慢死亡。
二、Flask-Migrate 何去何从?
Flask-Script
和 Flask-Migrate
一直在紧密配合,但是随着 Flask-Script
的消亡,Flask-Migrate
又该何去何从呢?
当你把项目中 Flask-Migrate
升级到最新版时就会发现,Flask-Migrate
竟然没有 MigrateCommand
这个对象了。
其实也好理解,代码中的最后一行 MigrateCommand
是要放到 manager.add_command()
里边的,Flask-Script
都没了 MigrateCommand
也没必要存在了,所以 Flask-Migrate
的作者就删除了这个对象。
参考文档:
- GitHub:https://github.com/miguelgrinberg/flask-migrate
- Docs:https://flask-migrate.readthedocs.io/en/latest/
三、Flask-CLI 闪亮登场!
Flask
从 0.11
开始就内置了 CLI
工具,当安装了 Flask
命令行就默认可以使用 flask
命令了:
我们需要在代码中将 Flask-Script
装饰器:
改成 Flask-CLI
装饰器:
最后在使用 flask
命令之前先设置 FLASK_APP
:
$ export FLASK_APP=main.py
$ flask
Usage: flask [OPTIONS] COMMAND [ARGS]...
A general utility script for Flask applications.
Provides commands from Flask, extensions, and the application. Loads the
application defined in the FLASK_APP environment variable, or from a
wsgi.py file. Setting the FLASK_ENV environment variable to 'development'
will enable debug mode.
$ export FLASK_APP=hello.py
$ export FLASK_ENV=development
$ flask run
Options:
--version Show the flask version
--help Show this message and exit.
Commands:
create Create all database.
db Perform database migrations.
routes Show the routes for the app.
run Run a development server.
shell Run a shell in the app context.
test Run service unittest.
这样我们就把我们自定义的命令加到 Flask-CLI
中了。
但是这样每次都需要手动设置 FLASK_APP
,为了解决这个问题需要安装 python-dotenv
包:
pip install python-dotenv
然后在项目根目录下创建一个名为 .flaskenv
的文件,将此内容放入其中:
FLASK_ENV=dev
FLASK_APP=main.py
以上就是 Flask-CLI
最核心的用法了,想查看更多的使用方法请参考 Flask
官方文档:https://flask.palletsprojects.com/en/2.0.x/cli/。