2

在 Google App Engine 上,我曾经将图像存储在 db 中:

class Images(db.Model):
    image = db.BlobProperty()

插入一个实体(比如“广告”)后,我可以使用以下内容在 HTML 页面中呈现图像:

    <img src="/image?entity_id={{advertisement.key}}" class="advertise" /></a><br />

在服务器端,通过以下方式检索图像:

class GetImage(webapp2.RequestHandler):
    def get(self):
        entity_id = self.request.get('entity_id')
        entity = db.get(entity_id)
        if entity and entity.image:
            self.response.headers['Content-Type'] = 'image/png'
            self.response.out.write(entity.image)

现在,我想将数据存储转换为 ndb,但我遇到了麻烦。

  1. 我还能在 HTML 中使用“Advertisement.key”吗?

  2. ndb 中没有 db.get() 方法。如何通过键检索实体?

4

1 回答 1

1

您可以使用 ndb.Key.to_old_key()

https://developers.google.com/appengine/docs/python/ndb/keyclass#Key_to_old_key

<img src="/image?entity_id={{advertisement.key.to_old_key()}}" class="advertise" />

检索 ndb 实体使用 key.urlsafe:

class Images(ndb.Model):
  image = ndb.BlobProperty()

<img src="/image?entity_id={{advertisement.key.urlsafe()}}" class="advertise" /></a><br />

class GetImage(webapp2.RequestHandler):
  def get(self):
    entity_id = self.request.get('entity_id')
    entity = ndb.Key(urlsafe=entity_id).get()
    if entity and entity.image:
      self.response.headers['Content-Type'] = 'image/png'
      self.response.out.write(entity.image)

https://developers.google.com/appengine/docs/python/ndb/keyclass#Key_urlsafe

于 2013-01-22T06:09:33.907 回答