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 に答える