Должен быть лучший и более Pythonic способ сделать это. Я создал небольшое приложение GAE, которое демонстрирует мою проблему (и незнание). Здесь вы вводите свое имя на странице входа. Затем приложение приветствует вас и увеличивает число нажатий. Отлично работает - пока кто-то еще не использует приложение одновременно, и в этот момент один пользователь наследует имя другого.Избегайте глобалов Python в Google App/Cloud Engine
Это потому, что имя хранится в a_state
, глобальном (singleton) объекте, объявленном внизу? Если да, то как я могу убедиться, что все пользователи сохраняют свои собственные имена? Заранее спасибо!
import webapp2
class AState:
my_name = "Foo"
a_number = 42
class GetName(webapp2.RequestHandler):
def post(self):
the_state.my_name = self.request.get('the_name')
self.redirect('/main')
def get(self):
self.response.write("""
<html><body><form action="/" method="post">
Type your name <input type="text" name="the_name">
<input type="submit" value="Continue">
</form></body></html>
""")
class Main(webapp2.RequestHandler):
def get(self):
the_state.a_number += 1
self.response.write("""
<html><body><form action="/main" method="get">
Hello, %s! The number is %d.
<input type="submit" value="Keep going">
</form></body></html>
""" % (the_state.my_name, the_state.a_number))
app = webapp2.WSGIApplication([
('/', GetName),
('/main', Main)
], debug=True)
the_state = AState()
Примечание: В реальном приложении, я использую ndb
для хранения информации, которые должны быть распределены между всеми пользователями (успешно!). Моя проблема связана с этой более эфемерной, специфичной для пользователя информацией.
Это правильное решение, чтобы укусить пулю и хранить даже этот материал в хранилище данных?