嗯,我对Flask有点新,所以不确定是否应该使用Flask Script或Flask内置的CLI工具,但现在我选择后者。
然而,我遇到了其他人在启动命令之前引导应用程序上下文并拥有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
,我会得到类似于以下内容:
有人能告诉我如何正确地使用File "/usr/local/lib/python3.6/site-packages/click/core.py", line 1150, in add_command name = name or cmd.name AttributeError: 'function' object has no attribute 'name'
create_app
方法之外的命令引导应用程序吗?