为什么Webapp2重定向到一个页面,但它没有重新加载?

时间:2013-06-02 02:45:18

标签: webapp2

我在GAE中使用webapp2,当我将self.redirect调用到如下所示的某个页面时:

self.redirect(some_url)

返回一个页面看起来像缓存,我必须刷新/重新加载页面,以便我得到最新的数据。

webapp2有缓存设置吗?或者我必须为该页面的响应设置一些属性?请指教。

4 个答案:

答案 0 :(得分:6)

在我的项目中,我通过在time.sleep(0.1)电话之前添加self.redirect('someurl')来解决此问题。

不确定这是否是解决问题的最佳方法,但页面开始显示最新信息。


编辑:注意一致性问题

查看@Lindsay个答案。使用time.sleep(0.1)可能会在本地环境中为您提供预期结果,但您无法在生产环境中信任它。如果您确实需要结果强烈一致,请使用祖先查询,而不是time.sleep(0.1)

答案 1 :(得分:5)

我的猜测是发生了这种情况,因为前面的页面正在更新一个实体,然后通过非祖先查询在后一页面上访问该实体。非祖先查询提供最终一致性而不是强一致性,因此问题不在于页面未被刷新,而是在更新完成之前显示数据的样子。当您刷新或添加对time.sleep()的调用时,您可能会为数据存储提供足够的时间来赶上,尤其是在测试期间。但是,在生产中,在所有情况下,您的睡眠时间可能不够长,页面刷新也是如此。

如果您检查应用程序并发现您使用的是非祖先查询,因此您的问题确实是最终一致性与强一致性,Google搜索会向您显示许多网页讨论该主题;这是一个:https://cloud.google.com/developers/articles/balancing-strong-and-eventual-consistency-with-google-cloud-datastore#ftnt_ref1

最简单的解决方案似乎是创建一个实体组并使用祖先查询,但这会带来可能的性能损失以及每个实体组每秒更新一次的限制。

答案 2 :(得分:1)

遇到同样的问题我做了一个不好的伎俩,但无论如何帮助了我。称为临时视图文件,然后执行html重定向:

<meta http-equiv="refresh" content="0.5;URL='/'">

希望它有所帮助。任何一个有更好答案的人?

答案 3 :(得分:0)

您是否在return之后立即致电self.redirect(some_url)?它可能会落到呈现页面的其他代码中。