Объекты User

Экземпляр класса User содержит информацию об авторизованном пользователе. Эти объекты являются уникальными и имеют возможность проведения над ними операций сравнения. Если два экземпляра будут равны, значит они указывают на одного и того же пользователя.

Приложение может получить доступ к объекту User текущего авторизованного пользователя путем вызова функции users.get_current_user().

from google.appengine.api import users

user = users.get_current_user()
if not user:
  # Если пользователь не авторизован
else:
  print "Hello, %s!" % user.nickname()

Объект можно также получить с помощью указания адреса электронной почт в конструкторе объекта.

user = users.User("Albert.Johnson@example.com")

Если конструктор класса User будет вызван с указанием почтового адреса, не зарегистрированного в Google, то объект будет создан, но не будет сопоставлен с реальным аккаунтом. Это поведение сохранится и после того, как кто-нибудь зарегистрирует аккаунт Google с этим адресом. В любом случае, если объект User был создан с указанием адреса электронной почты не сопоставленного со существующим аккаунтом Google, он никогда не будет указывать на реальный аккаунт.

При работе приложения в режиме разработки, все создаваемые объекты User выглядят как сопоставленные с реальными аккаунтами Google, после того как они сохраняются в локальном хранилище.

Сохранение профилей пользователей в хранилище

Экземпляр класса User является значением, которое возможно поместить в хранилище.

class UserPrefs(db.Model):
  user = UserProperty()

user = users.get_current_user()
if user:
  q = db.GqlQuery("SELECT * FROM UserPrefs WHERE user = :1", user)
  userprefs = q.get()

Примечание: В настоящее время, интерфейс Users API не предоставляет уникальные идентификаторы для аккаунтов Google. Несмотря на то, что адрес электронной почты на момент регистрации являлся уникальным, пользователь может в любой момент его изменить в своем аккаунте. Все подобные изменения не приводят к обновлению соответствующих данных в хранилище приложения. Уникальные идентификаторы пользователей и автоматические изменения данных электронной почты в хранилище могут быть реализованы в следующих версиях. До этих пор, не существует хорошего способа сопоставить текущего пользователя с его профилем и обеспечить корректную работу этого кода после смены адреса.

Избегайте использования адреса электронной почты в качестве идентификатора пользователя при работе с данными хранилища. Если вашему приложению необходимо хранить пользовательские профили, рассмотрите возможность использования типа User для свойства в модели данных и выполняйте запрос для их получения. Этот механизм будет корректно работать при изменении адреса электронной почты. Хотя он не гарантирует ошибочного задвоения в хранилище объектов с профилем пользователя, по крайней мере, запросы приложения будут возвращать всегда верные значения.