【问题标题】:Accessing User model from Flask shell raises NameError从 Flask shell 访问用户模型会引发 NameError
【发布时间】:2017-02-02 14:54:12
【问题描述】:

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

【问题讨论】:

    标签: python flask click


    【解决方案1】:

    shell 所做的只是启动一个 shell,加载您的应用并推送应用上下文。除此之外,默认情况下它与任何其他 Python shell 完全一样。如果你想使用它们,你仍然必须导入它们,因此会出现名称错误。

    使用app.shell_context_processor 装饰器将其他东西注入外壳。每个修饰函数都返回一个要注入的名称字典。

    def create_app():
        ...
    
        from myapp.users.models import User
    
        @app.shell_context_processor
        def inject_models():
            return {
                'User': User,
            }
    
        ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-13
      • 1970-01-01
      • 1970-01-01
      • 2017-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多