2017-03-26 7 views
0

Flaskファクトリアプリケーションパターンを使用し始めたら、設定とインポートが混乱します。私は#アプリで機能create_app/のinitの.py を使用してアプリケーションを作成していFlaskファクトリアプリケーションで電子メールトークンを設定するcreate_app

は、私は、開発/テスト/本番変数を設定するための設定ファイル、および他の設定ファイルとインスタンスのフォルダを持っています。

def create_app(config_name): 
    app=Flask(__name__, instance_relative_config=True) 
    app.config.from_object(app_config[config_name]) 
    app.config.from_pyfile('config.py') 
    etc... 
    return app 

私は確認メールを設定しようとしています青写真を使用し、#アプリ/認証/ views.py で認証ビューを持っていますがURLSafeTimedSerializerを使用してトークン...

from itsdangerous import URLSafeTimedSerializer 

@auth.route('/register', methods=['GET','POST']) 
def register(): 
    ts = URLSafeTimedSerializer(app.config['SECRET_KEY']) 
    token = ts.dumps(self.email, salt='email-confirm-key') 
    etc... 

今私の問題私の変数 'ts'にはapp.config ['SECRET_KEY']が必要です。しかし、(私はすべてのオンラインチュートリアルに示されているように)app変数を定義することができません。私はインポートしようとすると(#アプリ/認証/ views.pyで)...

from .. import app 

をエラーを取得し、私は次のようにインポートしようとすると...

from .. import create_app 

誰かが輝けるフラスコのアプリファクトリ「create_app」の外で「app」とapp.configを使用してモジュールを初期化する方法についての光?

私の質問を理解していただきたいと思います。

あなたが Flask.current_app

from flask import current_app 

... 

ts = URLSafeTimedSerializer(current_app.config['SECRET_KEY']) 

the documentationから使用する必要があります。このシナリオでは

答えて

1

:要求を処理するアプリケーションに

flask.current_app

ポイント。この は、複数のアプリケーションを同時にサポートする拡張機能の場合に便利です。 これはアプリケーションコンテキストによって供給され、 は要求コンテキストではないため、このプロキシの値はapp_context()メソッドを使用して に変更できます。

This linkは麻生特にアプリの設定にアクセスするにはcurrent_appを使用して、フラスコのアプリケーションファクトリの方法論についての詳細を説明しています。

+0

大変ありがとうございました。 –

関連する問題