【问题标题】:Redirect loading old content?重定向加载旧内容?
【发布时间】:2019-01-02 01:29:33
【问题描述】:

有点奇怪的问题。为了解释的目的简化问题。用户进入 /Total 页面并以“steve”为名称获取数据存储中的记录计数,此时有 2,然后他可以按增量,用户被重定向到 /Increment,因此添加了另一条记录进入 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>

【问题讨论】:

  • 如果您添加您正在使用的数据存储,以及它是否在某种类型的集群中运行,将会很有帮助。

标签: python google-app-engine flask


【解决方案1】:

发生这种情况的原因有很多:数据库更新缓慢(最终一致)、缓存等。

但是,这样的用户体验好吗?

如果用户看到一个数字 (2) 然后按下增量,但该记录已更改,是向用户显示他们期望的数字 (3) 还是实际数字(可能远高于 3他们点击的时间增量)?

对于 UX,我认为用户应该看到数字 3。他/她总是可以通过再次刷新看到最新的数字。

考虑到这一点,您可以通过将 /increment 调用更改为通过 AJAX 来解决此问题,并在收到 200 响应时简单地增加前端的数字。

【讨论】:

    【解决方案2】:

    您从 (Logins kind) 查询中获取计数,该查询始终最终一致,除非它是祖先查询。

    如果您将获取它的方法转换为高度一致的方法,例如通过将其存储在用户实体的属性中,您可以显示正确的计数,您始终可以通过键查找(或其他一些等效的实体类型)获得始终与用户实体保持一对一的关系,请参阅re-using an entity's ID for other entities of different kinds - sane idea?)

    【讨论】:

      【解决方案3】:

      我试图复制这个问题,它对我有用。我不确定这是否是您正在寻找的,但这里是my example code in GitHub

      运行代码时,请按以下步骤操作:

      1. 导航到 localhost:8080 将打印 Hello World
      2. 首次导航到 localhost:8080/add 以输入实体中的第一个值。 (将添加数字 2)
      3. 进入 GCP 页面中的 Entities 并从记录中获取 id
      4. 用代码ENTITY_KEY中的ID替换那个ID
      5. 导航到 localhost:8080/get 将打印实体中保存的数字
      6. 导航到 localhost:8080/update 将获取该数字,将该数字加 1 并再次保存该数字。
      7. 之后它会自动重定向到 localhost:8080/get 并会在实体中显示更新后的值

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-12-14
        • 1970-01-01
        • 1970-01-01
        • 2013-09-25
        • 1970-01-01
        • 1970-01-01
        • 2020-05-23
        相关资源
        最近更新 更多