4

I am using a webapp2 in GAE, when I called self.redirect to some page like below:

self.redirect(some_url)

which returned a page looks like cached, I have to refresh/reload the page so that I would get latest data.

Is there any cache setting for webapp2? or I have to set some properties for response of that page? Please advise.

4

4 回答 4

6

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

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


编辑:注意一致性问题

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

于 2014-02-12T07:46:18.927 回答
5

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

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

最简单的解决方案似乎是创建一个实体组并使用祖先查询,尽管这可能会影响性能,并且每个实体组每秒更新一次的限制。

于 2014-04-20T22:18:56.867 回答
1

遇到了同样的问题,我做了一个不好的把戏,但无论如何都帮了我。调用一个临时视图文件然后进行 html 重定向:

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

希望能帮助到你。谁有更好的答案?

于 2013-07-14T15:31:55.263 回答
0

之后你会return立即打电话self.redirect(some_url)吗?它可能会落入呈现页面的其他代码。

于 2013-06-12T23:12:35.047 回答