Прежде всего, модель исполнения App Engine довольно «свободна» - поэтому она так масштабируема! Когда приходит запрос на ваш URL, GAE может повторно использовать существующий процесс, который уже выполняет ваш скрипт, или , он может запустить другой процесс, выполняющий тот же скрипт, если это лучше уравновешивает общую загрузку системы; как только запрос обработан, обслуживающий его процесс может остаться или не зависеть, в зависимости от того, имеет ли система какое-то лучшее отношение к памяти, занимаемой процессом.
Поэтому вы должны кодировать таким образом, который работает в любой ситуации, не предполагая, что процесс будет зависать между запросами (и не предполагая, что не будет , либо). Таким образом, глобальные переменные (которых всегда лучше всего избегать во всех видах программирования) определенно не подходят!
Единственный гарантированный способ сохранить вещи между запросами - сохранить их в БД; отправка куки в браузер пользователя в качестве заголовка в вашем ответе, так что указанный браузер отправит его обратно при следующем запросе, также, вероятно, будет в порядке (пользователь может решить заблокировать свой браузер от принятия и повторной отправки куки, но это решение пользователя, и вы ничего не можете с этим поделать).
Абстрактная концепция "sesssion" может инкапсулировать эти варианты и позволить вам программировать на более высоком уровне, и многие фреймворки предлагают какой-то сеанс, например, смотрите gaeutilities , если вы уже не используете какой-то другой веб-фреймворк, обеспечивающий абстракцию сеанса.
Есть много других специфических проблем с вашим кодом (например, путаница между username
и user_name
, путаница между глобальными переменными и переменными класса и отсутствие какого-либо присвоения ни одному из них!), Но в некотором смысле это мелкие проблемы по сравнению со всей концептуальной проблемой использования глобалов в движке приложения! -)