2013-07-29 311 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文檔的鏈接,可以準確解釋發生在您身上的事情。 –