Non capisco come modificare una variabile globale quando si utilizza l'estensione flask-script del flask. Per dimostrare il mio problema ho sviluppato la seguente piccola applicazione di flacone, che aumenterà una variabile contatore globale per ogni chiamata di richiesta. Inoltre, offre una funzione di reset per ripristinare il contatore globale:Modifica di una variabile globale dall'esterno in un'applicazione Web Python basata su Flask
# -*- 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()
comincio la mia domanda pallone usando python counter.py runserver
Quando accedo l'indirizzo 127.0.0.1:5000 vedo il contatore crescente
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
...
Quando accedo l'indirizzo 127.0.0.1:5000/reset vedo che il contatore viene resettato
Counter 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 -
Tuttavia quando provo a chiamare il metodo di ripristino dalla riga di comando utilizzando l'interfaccia gestire fornita dalla estensione pallone-script la variabile contatore globale non viene azzerato:
> python counter.py reset
Counter before reset: 0
Counter after reset: 0
0
Che cosa sto facendo di sbagliato? Come posso accedere e manipolare una variabile globale usando il flag-flask?
Quindi non c'è un modo facile (senza DB, memcache) per risolvere il mio esempio? – asmaier
No, sfortunatamente è così che funzionano i computer –