Python 重新加载页面
我对谷歌应用程序引擎非常陌生,我正在尝试这个谷歌代码示例。我的问题是,当我发布一篇文章时,它不会显示它,但当我发布第二篇文章时,它会显示第一篇文章。似乎页面需要在第一次刷新,并且代码“self.redirect('/')似乎比程序早一步。或者有另一个问题,请帮助我。我不知道这是否与我的电脑有关,但如果您能帮助我,我将不胜感激 这是原始代码:Python 重新加载页面,python,google-app-engine,Python,Google App Engine,我对谷歌应用程序引擎非常陌生,我正在尝试这个谷歌代码示例。我的问题是,当我发布一篇文章时,它不会显示它,但当我发布第二篇文章时,它会显示第一篇文章。似乎页面需要在第一次刷新,并且代码“self.redirect('/')似乎比程序早一步。或者有另一个问题,请帮助我。我不知道这是否与我的电脑有关,但如果您能帮助我,我将不胜感激 这是原始代码: import cgi import os from google.appengine.api import users from google.appen
import cgi
import os
from google.appengine.api import users
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext import db
from google.appengine.ext.webapp import template
class Greeting(db.Model):
author = db.UserProperty()
content = db.StringProperty(multiline=True)
date = db.DateTimeProperty(auto_now_add=True)
class MainPage(webapp.RequestHandler):
def get(self):
greetings_query = Greeting.all().order('-date')
greetings = greetings_query.fetch(10)
if users.get_current_user():
url = users.create_logout_url(self.request.uri)
url_linktext = 'Logout'
else:
url = users.create_login_url(self.request.uri)
url_linktext = 'Login'
template_values = {
'greetings': greetings,
'url': url,
'url_linktext': url_linktext,
}
path = os.path.join(os.path.dirname(__file__), 'index.html')
self.response.out.write(template.render(path, template_values))
class Guestbook(webapp.RequestHandler):
def post(self):
greeting = Greeting()
if users.get_current_user():
greeting.author = users.get_current_user()
greeting.content = self.request.get('content')
greeting.put()
self.redirect('/')
application = webapp.WSGIApplication(
[('/', MainPage),
('/sign', Guestbook)],
debug=True)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
我看不出这段代码有什么问题,所以我倾向于认为您的浏览器可能正在缓存主页,因此在没有实际调用AppEngine站点的情况下显示结果。我建议通过在URL末尾添加一个参数来修改重定向,该参数将导致浏览器调用服务器。以下是一种方法: 将导入时间添加到文件顶部的导入中 将
留言簿的post
方法的结尾更改为:
timestamp = str(time.time()).replace(".","")
self.redirect('/?cachebuster=' + timestamp)
添加到URL的GET query参数值将确保浏览器向服务器发出新的实际请求
编辑:
我真傻。我认为你看到的是最终一致性的效果。简言之:谷歌的高复制数据存储将应用程序的数据存储在多个数据中心,但你必须采取特殊措施,以确保当你进行查询时,得到的结果非常一致;否则,为您的查询提供服务的数据中心可能尚未收到包含新数据的更新
所有这些都在AppEngine开发者文档中有很好的记录:@billwild,请检查我的编辑。它包含一个指向AppEngine文档的链接,该链接将准确解释发生在您身上的事情。