2013-07-29 259 views
0

我很新的谷歌应用程序引擎,我正在尝试这个guestbook谷歌代码的例子。我的问题是当我发布帖子时,它不显示它,但是当我发布第二篇帖子时,它显示第一篇帖子。看起来这个页面需要在第一次刷新时看起来像这个代码“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() 

回答

1

我不认为这有什么不妥,此代码,所以我倾向于认为,您的浏览器可能会缓存主页等显示结果没有实际打电话给您的AppEngine网站。我建议通过在URL的末尾添加一个参数来修改重定向,这会导致浏览器调用服务器。以下是一种方法:

import time添加到文件顶部的导入。

变化Guestbookpost方法的末尾改为:

timestamp = str(time.time()).replace(".","") 
self.redirect('/?cachebuster=' + timestamp) 

的GET查询参数添加到URL将确保您的浏览器发出新的实际请求到服务器值。编辑: 愚蠢的我。我认为你所看到的是最终一致性的影响。简而言之:Google的高复制数据存储将您的应用程序的数据存储在多个数据中心中,但是您必须采取特殊措施来保证当您执行查询时,您会得到强烈一致的结果;否则,提供查询服务的数据中心可能尚未用新数据接收到更新。

它在AppEngine开发文档都非常有据可查的:https://developers.google.com/appengine/docs/python/datastore/structuring_for_strong_consistency

+0

它没有工作,但由于 – billwild

+0

@billwild,检查我的编辑。它包含一个指向AppEngine文档的链接,可以准确解释发生在您身上的事情。 –