Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从Flask shell访问用户模型会引发NameError_Python_Flask_Click - Fatal编程技术网

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

Python 从Flask shell访问用户模型会引发NameError,python,flask,click,Python,Flask,Click,我想从由shell命令启动的烧瓶外壳向数据库添加一个用户。我使用的是应用程序工厂,因此我创建了自己的FlaskGroupcli:python myapp.py shell。当我尝试访问用户模型时,我得到名称错误:名称“User”未定义。如何从烧瓶外壳访问我的模型 def create_app(config_name): application = Flask(__name__) application.config.from_object(config[config_name])

我想从由
shell
命令启动的烧瓶外壳向数据库添加一个用户。我使用的是应用程序工厂,因此我创建了自己的
FlaskGroup
cli:
python myapp.py shell
。当我尝试访问
用户
模型时,我得到
名称错误:名称“User”未定义
。如何从烧瓶外壳访问我的模型

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()

所有的
shell
都是在加载应用程序并推送应用程序上下文的情况下启动shell。除此之外,默认情况下它与任何其他Python shell完全相同。如果要使用它们,您仍然必须导入它们,因此出现名称错误

使用decorator向shell中注入其他内容。每个修饰函数返回一个要注入的名称的dict

def create_app():
    ...

    from myapp.users.models import User

    @app.shell_context_processor
    def inject_models():
        return {
            'User': User,
        }

    ...

所有的
shell
都是在加载应用程序并推送应用程序上下文的情况下启动shell。除此之外,默认情况下它与任何其他Python shell完全相同。如果要使用它们,您仍然必须导入它们,因此出现名称错误

使用decorator向shell中注入其他内容。每个修饰函数返回一个要注入的名称的dict

def create_app():
    ...

    from myapp.users.models import User

    @app.shell_context_processor
    def inject_models():
        return {
            'User': User,
        }

    ...