flask命令是使用flask.cli.FlaskGroup创建的Click接口.创建自己的组并将其传递给工厂函数.使用app.shell_context_processor将对象添加到shell.
from flask import Flask
from flask.cli import FlaskGroup
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
def create_app(script_info=None):
app = Flask(__name__)
db.init_app(app)
...
@app.shell_context_processor
def shell_context():
return {'app': app, 'db': db}
return app
cli = FlaskGroup(create_app=create_app)
@cli.command
def custom_command():
pass
if __name__ == '__main__':
cli()
运行您的文件而不是flask命令.您将使用工厂获得Click界面.
FLASK_DEBUG=1 python app.py run
理想情况下,创建一个入口点并在您的环境中安装您的包.然后,您可以将脚本作为命令调用.创建一个至少包含以下内容的setup.py文件.
project/
app/
__init__.py
setup.py
from setuptools import setup, find_packages
setup(
name='my_app',
version='1.0.0',
packages=find_packages(),
entry_points={
'console_scripts': [
'app=app:cli',
],
},
)
pip install -e /path/to/project
FLASK_DEBUG=1 app run
使用您自己的CLI不如内置flask命令强大.由于您的cli对象是使用其他代码定义的,因此模块级错误将导致重新加载器失败,因为它无法再导入该对象. flask命令与您的项目是分开的,因此它不受模块中错误的影响.