Команда flask
представляет собой интерфейс Click, созданный с помощью flask.cli.FlaskGroup
. Создайте свою группу и передайте ей заводскую функцию. Используйте app.shell_context_processor
для добавления объектов в оболочку.
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
В идеале создайте точку входа и установите свой пакет в env. Затем вы можете вызвать скрипт как команду. Создайте файл 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
Использование собственного интерфейса командной строки менее надежно, чем встроенная команда flask
. Поскольку ваш объект cli
определен с помощью другого вашего кода, ошибка на уровне модуля приведет к сбою загрузчика, поскольку он больше не может импортировать объект. Команда flask
отделена от вашего проекта, поэтому на нее не влияют ошибки в вашем модуле.
person
davidism
schedule
13.03.2017