2017-11-14 8 views
0

をリロードページに永続化されていない私は私のフラスコアプリ内でグローバル変数を使用しようとしています:をフラスコ - グローバル変数は

from flask import Flask, render_template, request, jsonify 

app = Flask(__name__) 

varGlobal = None 
@app.route('/') 
def home(): 
    return render_template('home.html') 

@app.route('/api/prepare', methods=['POST']) 
def prepare(): 

    if varGlobal is None: 
     varGlobal = "some_val" 
    return varGlobal 

if __name__ == '__main__': 
    app.run(host='0.0.0.0', port=8989, debug=True) 

だから私のページがロードされ、私は私が手api/prepareを打ったとき:

UnboundLocalError: local variable 'varGlobal' referenced before assignment

このvarGlobalは、私のアプリが動作している間は持続します。私がページをリロードしたとしても。これどうやってするの?

+1

prepare関数定義のすぐ下に "global varGlobal"という行を追加します – NendoTaka

+3

'prepare'の' varGlobal'に割り当てます。ですから**グローバル変数ではありません**。 'prepare'の最初の行に' global varGlobal'を使います。言われているように、グローバル変数は通常、**良いアイデアではありません。 –

+2

プロダクションでは正常に動作しないため、これをやりたいとは思わないことに注意してください。 –

答えて

0

これは主にあなたがglobalキーワードを使用していないためにトレースバックの理由は言及されません。そのため、グローバル変数はコメント/回答にすでに明記されている方法とは異なる方法で正しくバインドできません。

ここでは、グローバル変数、特にマルチスレッド環境では、それらが悪いのを避けることを強くお勧めします。別のスレッドが生成されたとき(つまり、複数のユーザー)にコードが悲惨に失敗します。

代わりに、この1つのような非常に特殊なタスク用に作成されたフラスコのユーティリティに慣れ親しむことをお勧めします。http://flask.pocoo.org/docs/0.12/api/#flask.Flask.app_ctx_globals_class