2017-02-02 2 views
0

shellコマンドで開始されたFlaskシェルからデータベースにユーザーを追加したいとします。私はアプリケーションファクトリを使用していますので、自分でFlaskGroup cli:python myapp.py shellを作成します。 Userモデルにアクセスしようとすると、NameError: name 'User' is not definedと表示されます。 Flaskシェルから私のモデルにアクセスするにはどうすればいいですか?FlaskシェルからユーザーモデルにアクセスするNameError

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

すべてshellは、アプリが読み込まれてアプリコンテキストがプッシュされたシェルを起動します。それ以外は、デフォルトでは他のPythonシェルとまったく同じです。あなたはそれらを使用したいので、それでも名前のエラーをインポートする必要があります。

app.shell_context_processorデコレータを使用して、他のものをシェルに注入します。装飾された各関数は、注入する名前のdictを返します。

def create_app(): 
    ... 

    from myapp.users.models import User 

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

    ... 
関連する問題