использование хранилища данных GAE для управления заданиями

У меня есть объект «Расчет» в моем хранилище данных, скажем, с 7 миллионами объектов под этим объектом. Он имеет следующие свойства (среда выполнения Python):

class Calculation(db.Model):
    question = db.StringProperty(required=True)
    answer = db.StringProperty()

предположим, что примерами свойства «вопрос» являются такие вещи, как «1 + 1», «2 + 2», «3 + 3» (не очень важно). Все объекты расчета начинаются с пустых свойств ответа.

Когда пользователь подключается к приложению, выполняется вызов ajax, и мое приложение должно [1] получить объект Calculation с пустым свойством ответа и отправить его в браузер пользователя. Затем браузер пользователя оценивает вопрос и отправляет его обратно другому обработчику сервера.

Как обновить свойство ответа этого конкретного объекта Calculation[2]?

Если бы кто-нибудь мог предоставить мне код для [1] и [2], это было бы здорово. Не очень разбираюсь в App Engine, а запросы сбивают с толку. Какое лучшее решение для этого, если я хочу сохранить как можно больше серверного процессора?

Спасибо!


person ejang    schedule 04.09.2011    source источник


Ответы (1)


Я не знаю, действительно ли я понимаю. Но вам просто нужно вернуть для вашего первого вызова ajax ключ вычисления сущности и файл question. Когда пользователь отвечает, вы сначала получаете объект по ключу и обновляете свойство answer.

Шаг 1. Вызов ajax возвращает вопрос в формате JSON (например):

# To fetch an empty answered question
qry = Calculation.All().filter('answer =', None)
ref = qry.get()

# The Json response
{ 'key': unicode(ref.key()),
  'question': ref.question}

Шаг 2. Вы обновляете сущность по ключу:

# key and answer are variable from an http GET or POST request.
ref = db.get(key)
ref.answer = answer
ref.put()
person sahid    schedule 04.09.2011
comment
спасибо, именно то, что я искал. однако я считаю, что qry должен быть qry = Calculation.all().filter('answer =','None') - person ejang; 04.09.2011
comment
@ejang Нет, этого не должно быть - это будет соответствовать ответам со строковым значением None, а не ответам None. - person Nick Johnson; 05.09.2011
comment
хм, странно. кажется, что это строка «Нет» в хранилище данных, но это может быть требование = True или что-то, что приводит к тому, что «Нет» помещается в пустые свойства. - person ejang; 05.09.2011