Хорошо, я немного новичок в Flask, поэтому я не уверен, должен ли я использовать Flask Script или встроенный CLI Flask взял, но я собираюсь с последним пока.
Тем не менее, я сталкиваюсь с проблемой, с которой сталкиваются другие, когда дело доходит до начальной загрузки контекста приложения перед запуском команды и наличием контекста current_app и прочего.
def create_app(test_config=None):
# create and configure the app
app = Flask(__name__, instance_relative_config=True)
app.cli.add_command(seed_db)
return app
@click.command
@with_appcontext
def seed_db():
# Register SqlAlchemy
from .models import db, User, Role
db.init_app(app)
# Setup Flask-Security
user_datastore = SQLAlchemyUserDatastore(db, User, Role)
security = Security(app, user_datastore)
# Some initial models (if they don't exist)
user_datastore.find_or_create_role(name='admin', description='Administrator')
user_datastore.find_or_create_role(name='end-user', description='End user')
return app
Так что в этом случае у меня есть заводской метод инициализации приложения.И затем у меня есть собственная команда, которую я хочу запустить для заполнения базы данных.
Я уже смог запустить flask db migrate
, чтобы настроить свои исходные таблицы, но если я попытаюсь запустить flask seed_db
, Я получаю что-то вроде этого:
Файл "/usr/local/lib/python3.6/site-packages/click/core.py", строка 1150, в add_command name = name или cmd.name AttributeError: у объекта 'function' нет атрибута 'name'
Может кто-нибудь объяснить мне, как правильно загрузить приложение с помощью команд вне метода create_app
?