从get_by_id()派生Key()

时间:2012-05-21 13:15:52

标签: python google-app-engine key

我已经进行了用户注册,其中包括(姓名,密码,电子邮件,电话号码),现在尝试在Google App引擎数据存储区中包含图片。一切都很好,只是图像上传和调整大小很麻烦。但是,我现在已经开始工作了。

基本上有三个处理程序

  • 第一个用于注册页面处理程序(信息测试和重定向到用户页面)
  

“”“从注册页面获取所有请求并存储在数据库中”“

userinfo.put()
u_id = userinfo.key().id()
     

“”“创建cookie和哈希值,其中值为u_id”“”

     

self.redirect(/userpage)

  • 其次是用户页面处理程序(验证在注册处理程序中创建的cookie,如果哈希cookie有效,则重定向到用户页面,否则再次重定向到注册页面)
user_id = Users.get_by_id(u_id)
user_key = ?  # how can I get key of user_id
     

self.render("user.html", user =user_id.user, avatar = user_id.avatar)

  • 第三是图像处理程序
class disp_image(webapp.RequestHandler):
  def get(self):
      key = self.request.get('key')
      image = Users.get(key)
      self.response.headers['Content-Type'] = "image/png"
      return self.response.out.write(image.avatar)

模板

<img src="/disp?key={{avatar}}" />

我已经解决了这个问题,我们进行了修改,以便更清楚地说明谁先前对我的问题进行了投票。

2 个答案:

答案 0 :(得分:1)

user_key = user_id.key()

但为什么你的头在旋转?你到底想要完成什么?

答案 1 :(得分:0)

我想你的问题是要理解,key,key_name和id?您必须仔细阅读课程db.Key

的文档

https://developers.google.com/appengine/docs/python/datastore/keyclass

key = userinfo.key() # Returns an instance of the class `db.Key`
if key.id(): # That means the key use a numeric ID
  id = key.id()
else: # That means you can not have an ID in numeric and in string
  key_name = key.name() # That means the key use a string ID

正如您可以在doc上阅读的那样,当您想要创建一个对象db.Key时,您可以使用方法Key.from_path(kind, id_or_name, parent=none, namespace=None, **kwds),此方法使用字符串作为ID。

  

id,指定为字符串或long。它不能是数字0。