gpt4 book ai didi

python - Flask 工厂模式和 Flask CLI 命令

转载 作者:太空宇宙 更新时间:2023-11-04 00:17:47 24 4
gpt4 key购买 nike

好的,我对 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 方法之外的命令正确引导应用程序?

最佳答案

使用@click.command时出现错误

我认为错误消息为您提供了一个明确的线索,表明您忘记了为命令命名。

您需要为命令初始化一个名称,如 @click.command("seed_db") 或像这样的默认函数名称 @click.command()

@click.command("seed_db")
@with_appcontext
def seed_db():
# Register SqlAlchemy
from .models import db, User, Role
db.init_app(app)

希望对您有所帮助。

关于python - Flask 工厂模式和 Flask CLI 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50298565/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com