我想从shell
命令启动的Flask shell向数据库添加用户。我正在使用应用工厂,因此我创建了自己的FlaskGroup
cli:python myapp.py shell
。当我尝试访问User
模型时,我得到NameError: name 'User' is not defined
。如何从Flask shell访问我的模型?
def create_app(config_name):
application = Flask(__name__)
application.config.from_object(config[config_name])
db.init_app(application)
from user import user
application.register_blueprint(user, url_prefix='/user')
return application
def create_cli_app(info):
return create_app('develop')
@click.group(cls=FlaskGroup, create_app=create_cli_app)
def cli():
pass
if __name__ == '__main__':
cli()
答案 0 :(得分:1)
所有shell
都会启动一个shell,同时加载您的应用并推送应用上下文。除此之外,它默认与任何其他Python shell完全一样。如果要使用它们,仍然需要导入内容,因此名称错误。
使用app.shell_context_processor
装饰器将其他内容注入shell。每个修饰函数返回一个要注入的名称字典。
def create_app():
...
from myapp.users.models import User
@app.shell_context_processor
def inject_models():
return {
'User': User,
}
...