Ich verstehe nicht, wie Sie eine globale Variable ändern, wenn Sie das flaschen-extension-flask-script verwenden. Um mein Problem zu demonstrieren, entwickelte ich die folgende kleine Kolben-Anwendung, die eine globale Zählervariable für jeden Anfrageanruf erhöht. Darüber hinaus bietet es eine Reset-Funktion den globalen Zähler zurücksetzen:Ändern einer globalen Variablen von außen in einer Flask-basierten Python-Webanwendung
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
from flask import Flask
from flask.ext.script import Manager
app = Flask(__name__)
app.debug = True
manager = Manager(app)
counter = 0
@manager.command
@app.route("/reset")
def reset():
global counter
print "Counter before reset:", counter
counter = 0
print "Counter after reset:", counter
return str(counter)
@app.route("/")
def add():
global counter
print "Counter before adding:", counter
counter +=1
print "Counter after adding:", counter
return str(counter)
if __name__ == "__main__":
manager.run()
ich meine Kolben-Anwendung starten python counter.py runserver
Verwendung Wenn ich die Adresse zugreifen 127.0.0.1:5000 ich den Zähler sehen zunehmende
Counter before adding: 0
Counter after adding: 1
127.0.0.1 - - [17/Apr/2013 10:09:35] "GET/HTTP/1.1" 200 -
127.0.0.1 - - [17/Apr/2013 10:09:35] "GET /favicon.ico HTTP/1.1" 404 -
Counter before adding: 1
Counter after adding: 2
...
Wenn ich die Adresse zugreifen 127.0.0.1:5000/reset ich, dass der Zähler siehe zurückgesetzt
istCounter before reset: 4
Counter after reset: 0
127.0.0.1 - - [17/Apr/2013 10:10:39] "GET /reset HTTP/1.1" 200 -
127.0.0.1 - - [17/Apr/2013 10:10:39] "GET /favicon.ico HTTP/1.1" 404 -
aber wenn ich versuche, die Reset-Methode von der Kommandozeile rufen Sie die Schnittstelle durch den Kolben-Skript Erweiterung der globale Zählervariable zurückgesetzt wird, nicht zur Verfügung gestellt verwalten mit:
> python counter.py reset
Counter before reset: 0
Counter after reset: 0
0
Was mache ich falsch? Wie kann ich eine globale Variable mit flask-script aufrufen und bearbeiten?
So gibt es keinen einfachen Weg (ohne DB, Memcache), um mein Beispiel zu beheben? – asmaier
Nein, leider funktionieren Computer so –