在重定向之前等待数据存储区更改

时间:2015-03-31 20:29:42

标签: python google-app-engine google-cloud-datastore

this question非常相似,但答案不合适。

我从数据存储区查询填充表格,然后有一个链接允许用户删除特定的行。单击该链接将转到从数据存储区删除该行的URL,然后重定向回该表。

在重新加载之前,更改的频率通常不会显示在表格中。

简单的解决方案是重定向到另一个页面,该页面使用javascript重定向来添加几秒钟的延迟。其他替代方法是将详细信息发送回页面,如action=delete&key=###,然后确保从表中遗漏该项目。但这很痛苦。

4 个答案:

答案 0 :(得分:2)

答案是祖先查询。 https://cloud.google.com/appengine/docs/python/datastore/queries#Python_Ancestor_queries

使用父级创建实体。当删除其中一个实体时,您可以为表列表视图运行一个祖先查询,该查询在数据更改时具有很强的一致性。

祖先查询示例:

tom = Person(key_name='Tom')

photo_query = Photo.all()
photo_query.ancestor(tom)

答案 1 :(得分:1)

使用数据存储区,除非您可以使用祖先,否则您无法保证何时更新索引,只能保证实体本身(稍后通过键获取)通过执行put而不使用异步。 Best是您的建议的组合,其中客户端考虑其修补ui的操作,加上可能使用memcache记住服务器端的最近操作和补丁查询,然后返回客户端。

答案 2 :(得分:1)

这是一种不同的方法。使用Javascript和AJAX。当用户点击链接时,您会做两件事:

  1. 使用Javascript / jQuery从DOM中删除行,
  2. 向服务器发送AJAX调用以进行相应的数据存储修改。
  3. 它可以提供良好的用户体验,因为您根本不会重新加载页面。

答案 3 :(得分:0)

您可能需要考虑在表格中始终存在显示过时信息的空间:例如,在2个不同的窗口/标签中同时显示表格,然后在其中一个中执行删除操作,另一个仍将显示删除如果遵循将导致404的链接。

考虑到这一点,我首先关注的是管理期望(用户应该知道页面可能偶尔会显示过时的信息),然后是用户能够同时获得过时的页面(刷新按钮?)。哪个可能使问题没有实际意义。

基于延迟的“解决方案”迟早会在竞争条件情况下失败,我不会为额外的复杂性而烦恼。特别是对于删除完成的文档:这正是用户知道信息已过时(免费)的地方,并且可能倾向于刷新,直到最近的更改变为可见。