Перенаправить загрузку старого контента? - PullRequest
0 голосов
/ 02 января 2019

немного странная проблема. Для упрощения задачи в целях объяснения. Пользователь переходит на страницу / Итого и получает количество записей в хранилище данных с именем "steve", в данный момент их 2, он может затем нажимать инкремент, и пользователь перенаправляется на / Инкремент, поэтому добавляется еще одна запись. в nbd пользователь затем снова перенаправляется в / Total, однако он по-прежнему показывает 2! Если он просто обновляет страницу, он показывает 3. Я полагаю, это потому, что перенаправление обратно в / Total происходит до того, как объект полностью зафиксирован в хранилище данных? Если нет, вот код, пожалуйста, дайте мне знать, что не так. Спасибо!

    PYTHON:
    @app.route("/Total", methods=['GET', 'POST'])
    def total():
     data = Logins.query(Logins.name == "steve").count()
    return render_template('Total.html', count=count)

    @app.route("/Increment", methods=['GET', 'POST'])
    def incre():
     new_data = oAuthLogins()
     new_data.name = "steve"
     new_data.put()
    return redirect(url_for('total'))

    Total.html:
    {{count}}
    <a href={{url_for('incre')}}> Increment! </a>

Ответы [ 3 ]

0 голосов
/ 02 января 2019

Вы получаете счет из (Logins вида) запроса, который всегда в конечном итоге непротиворечив, если это не запрос предка.

Вы можете отобразить правильный счет, если вы преобразуете метод получения его встрого согласованный, например, сохраняя его в свойстве пользовательского объекта, которое вы всегда можете получить путем поиска по ключу (или некоторого другого эквивалентного вида объекта всегда в отношении 1: 1 с пользовательским объектом, см. повторное использование идентификатора сущности для других сущностей разных типов - вменяемая идея? )

0 голосов
/ 07 января 2019

Я попытался повторить проблему, и она сработала для меня. Я не уверен, что это то, что вы ищете, но вот мой пример кода в GitHub .

При запуске кода выполните следующие действия:

  1. Переход на локальный хост: 8080 выведет Hello World
  2. Перейдите к localhost: 8080 / добавьте в первый раз, чтобы ввести первое значение в сущности. (Добавлю номер 2)
  3. Перейдите на страницу сущностей в GCP и получите идентификатор из записи
  4. Заменить этот идентификатор идентификатором в коде ENTITY_KEY
  5. Перейдите к localhost: 8080 / get выведет номер, сохраненный в объекте
  6. Перейдите на localhost: 8080 / update получит этот номер, добавит 1 к этому номеру и снова сохранит номер.
  7. После этого он автоматически перенаправит на localhost: 8080 / get и покажет вам обновленное значение в сущности
0 голосов
/ 02 января 2019

Это может происходить по нескольким причинам: медленное обновление БД (в конечном итоге непротиворечивое), кэширование и т. Д.

Но это хороший пользовательский опыт?

Если пользователь видит число (2), затем нажимает инкремент, но эта запись изменилась, лучше показать пользователю ожидаемое число (3) или фактическое число (которое может быть намного больше 3 на время, когда они нажимают приращение)?

Для UX, я думаю, что пользователь должен видеть номер 3. Он / она всегда может увидеть последний номер с другим обновлением.

Имея это в виду, вы решаете эту проблему, изменяя вызов /increment, выполняемый через AJAX, и просто увеличиваете число на входном конце, когда получаете ответ 200.

...