Первое, что нужно отметить, это то, что в Handler1
ваш код фактически не сохраняет сущность в хранилище данных, для этого вам нужно вызвать метод .put()
:
my_ds = myDS()
my_ds.a = "abc" #Trying to update the value
my_ds_key = my_ds.put() # save my_ds to the datastore and get its key
ВторойСледует отметить, что в Handler2
вызов my_ds = myDS()
не извлекает сущность из хранилища данных, как вы могли бы ожидать, он просто создает вместо нее новую сущность (которая также не сохраняется в хранилище данных).Для извлечения сущности из хранилища данных вам нужно выполнить поиск по ключу сущности (или получить его с помощью запроса):
my_ds = my_ds_key.get()
Это очень основные понятия об использовании хранилища данных, вам, вероятно, нужно получитьбольше знаком с ними.Вам необходимо пройти Создание, извлечение, обновление и удаление объектов (и, возможно, другие связанные главы, сгруппированные в разделе Google Cloud Datastore
на левой боковой панели навигации на этой странице документа)
НаконецЧтобы выполнить такой поиск, вам необходимо каким-то образом определить или передать ключ объекта, полученный в Handler1
, в Handler2
, поскольку каждый запрос к этим обработчикам не зависит друг от друга.Возможный интерес: Передача данных между страницами в функции redirect () в Google App Engine
Пример передачи строкового представления ключа через webapp2
сессий:
InHandler1
my_ds_key = my_ds.put() # save my_ds to the datastore and get its key
self.session['urlsafe'] = my_ds_key.urlsafe()
In Handler2
urlsafe = self.session.get('urlsafe')
if urlsafe:
my_ds = ndb.Key(urlsafe=urlsafe).get()
Пример передачи строкового представления ключа с использованием строки URL-запроса, например /get?urlsafe=<key's urlsafe representation>
(может быть хешировано, если хотите, так какбудет отображаться в браузере):
In Handler1
my_ds_key = my_ds.put() # save my_ds to the datastore and get its key
self.redirect('/get?urlsafe=%s' % my_ds_key.urlsafe())
In Handler2
urlsafe = self.request.get('urlsafe')
if urlsafe:
my_ds = ndb.Key(urlsafe=urlsafe).get()
Пример получения объекта в Handler2
череззапрос (в примере предполагается, что правильный объект возвращается запросом)
results = myDS().query().fetch(limit=1)
if results:
my_ds = results[0]