从Flask shell访问用户模型会引发NameError

时间:2017-02-02 14:54:13

标签: python flask click

我想从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()

1 个答案:

答案 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,
        }

    ...