2017-11-14 2 views
0

ich eine globale Variable in meinem Kolben App zu nutzen versuchen:Flask - Globale Variable wird persistierende nicht auf Seite neu lädt

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) 

Also, wenn meine Seite geladen wird und ich api/prepare traf ich:

UnboundLocalError: local variable 'varGlobal' referenced before assignment

Ich möchte das varGlobal beibehalten, solange meine App ausgeführt wird. Auch wenn ich die Seite neu lade. Wie kann ich das machen?

+1

fügen Sie eine Zeile "global varGlobal" direkt unter der Vorbereitungsfunktionsdefinition hinzu – NendoTaka

+3

Sie ordnen die 'varGlobal' in' prepare' zu. Also ist es ** nicht ** eine globale Variable. Verwenden Sie 'global varGlobal' als erste Zeile in' prepare'. Davon abgesehen sind globale Variablen normalerweise ** nicht ** eine gute Idee. –

+2

Beachten Sie, dass Sie das wahrscheinlich sowieso nicht machen wollen, da es in der Produktion nicht richtig funktioniert. –

Antwort

0

Ich werde nicht noch einmal den Grund Ihrer Traceback erwähnen, das liegt hauptsächlich daran, dass Sie nicht das global Schlüsselwort verwenden, so dass die globale Variable nicht ordnungsgemäß von Ihrer Methode als andere bereits in den Kommentaren/Antworten geklärt werden kann.

Jetzt würde ich Ihnen dringend empfehlen, globale Variablen zu vermeiden, besonders in Multithread-Umgebungen, sind sie böse. Ihr Code wird kläglich versagen, wenn verschiedene Threads erzeugt werden (zB: mehrere Benutzer).

Stattdessen würde ich vorschlagen, dass Sie sich mit einigen der Flaschen-Utils vertraut machen, die für diese sehr spezifische Aufgabe erstellt wurden, wie diese http://flask.pocoo.org/docs/0.12/api/#flask.Flask.app_ctx_globals_class.

Verwandte Themen