2013-01-22 52 views
2

在谷歌App Engine的,我用來存儲在數據庫圖片:谷歌應用程序引擎轉換分貝NDB

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()方法。我如何通過密鑰檢索實體?

回答

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

+0

但實際上,th e圖像場存在於許多模型中。我想在不使用模型名稱的情況下檢索圖像。我該怎麼做?謝謝。 –

+0

另外,系統將會重新啓動,所以我不需要'to_old_key'。我還可以使用advertisement.key嗎?使用urlsafe的 –

+0

將對包括祖先的整個密鑰進行編碼,以便無論圖像模型是否嵌套都應該工作。 – DTing