Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 重新加载页面_Python_Google App Engine - Fatal编程技术网

Python 重新加载页面

Python 重新加载页面,python,google-app-engine,Python,Google App Engine,我对谷歌应用程序引擎非常陌生,我正在尝试这个谷歌代码示例。我的问题是,当我发布一篇文章时,它不会显示它,但当我发布第二篇文章时,它会显示第一篇文章。似乎页面需要在第一次刷新,并且代码“self.redirect('/')似乎比程序早一步。或者有另一个问题,请帮助我。我不知道这是否与我的电脑有关,但如果您能帮助我,我将不胜感激 这是原始代码: import cgi import os from google.appengine.api import users from google.appen

我对谷歌应用程序引擎非常陌生,我正在尝试这个谷歌代码示例。我的问题是,当我发布一篇文章时,它不会显示它,但当我发布第二篇文章时,它会显示第一篇文章。似乎页面需要在第一次刷新,并且代码“self.redirect('/')似乎比程序早一步。或者有另一个问题,请帮助我。我不知道这是否与我的电脑有关,但如果您能帮助我,我将不胜感激

这是原始代码:

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文档的链接,该链接将准确解释发生在您身上的事情。