【发布时间】:2015-02-05 20:44:40
【问题描述】:
我正在尝试将一个简单的保存字符串保存到数据存储区,重定向到该实体的键,然后在下一个处理程序中获取它。当我在 PDFHandler 中调用以获取字符串 (a.name()) 时,每次都会返回“w”,无论我输入什么。
class Pdf(db.Model):
name = db.StringProperty(required=True)
class InputHandler(Handler):
def get(self):
self.render('cert_form.html')
def post(self):
name = self.request.get('name')
if name:
a = Pdf(name=name)
a.put()
self.redirect('/key=%s' % a.key())
else:
error = "Please enter your full name."
self.render('cert_form.html')
class PDFHandler(Handler):
def get(self, id):
a = db.Key.from_path('Pdf', id)
self.response.write(a.name())
application = webapp2.WSGIApplication([
(r'/', InputHandler),
(r'/key=(.)+', PDFHandler),
], debug=True)
【问题讨论】:
-
您在 appengine 数据存储查看器中看到的 PDF 实体名称字段的值是什么?
-
它给出了“Bobby Smith”、“John Adams”等名称。这是另一个问题。我已经到了可以返回实体键的地步。我如何从中简单地查找实体属性(名称,id)?当我输入 post = key.get() 我得到 AttributeError: 'str' object has no attribute 'get'
-
看起来像当你调用 key.get() - key 是一个字符串而不是一个 Key 对象。如果您从 url 获取密钥 - 您将需要获取该字符串并在调用 get() 之前为该实体创建一个 Key 对象。
-
您是否有理由必须使用老旧的
db而不是广受欢迎的新ndb?我对db如此生疏了,我需要很长的刷新周期来帮助解决这个问题——这么多年来,我只使用了ndb!另外,我怀疑您的r'/key=(.)+'究竟捕获了什么——重复组而不是其内容,多么奇怪的 RE 模式?!为什么不是普通的r'/key=(.+)',毫无疑问地捕获重复的内容?至少尝试在PDFHandler中记录id,看看它是不是你认为的那样......
标签: python python-2.7 google-app-engine google-cloud-datastore