问题:数据存储更新太慢 - 提交创建实体的表单后,需要在显示数据存储中实体的结果页面上点击重新加载。
预期行为:实体应该出现在查询中,因为我将 NDB 用于我的数据存储区,它会自动缓存事物。
问题重现步骤
- 在适用于 Mac 的 GoogleAppEngineLauncher 1.8.3 中创建一个默认项目(我的操作系统版本是 10.8.4)并将下面的代码粘贴到“main.py”中
- 运行项目并访问根 URL。
- 在表格中输入一个数字,然后单击提交。
- 您将看到文本“这是实体列表:...结束列表。”
- 在浏览器上点击重新加载。
- 现在您将看到文本“这里是实体列表:[您输入的数字] ...结束列表。”
预期行为的解释
由于 NDB 自动使用 memcache,因此不应发生第 4 步和第 5 步。单击表单上的提交后,您输入的数字应该会显示出来。我在常规的 appengine DB 中也观察到了这种行为,并且我知道我可以使用 memcache 解决它。
以下是一些代码,您可以将它们放入由 AppEngineLauncher 创建的默认 main.py 中,以复制此问题:
import webapp2
from google.appengine.ext import ndb
class SmallModel(ndb.Model):
n = ndb.IntegerProperty(required=True)
stamp = ndb.DateTimeProperty(auto_now_add=True)
class MainHandler(webapp2.RequestHandler):
def get(self):
self.response.write('Hello world. Simple form. <form method="post"><input name="n" type="number"><input type="submit"></form>')
def post(self):
entity = SmallModel(n=int(self.request.get('n')))
entity.put()
self.redirect('/list')
class List(webapp2.RequestHandler):
def get(self):
self.response.out.write("here's a list of entities:")
entities = SmallModel.query()
for entity in entities.iter():
self.response.out.write(" %s " % entity.n)
self.response.out.write("...end list.")
app = webapp2.WSGIApplication([
('/', MainHandler),
('/list',List)
], debug=True)
任何帮助/建议?先感谢您!我已经能够在我测试的两个浏览器中重现这个问题——Chrome 和 Safari。