【问题标题】:Google App Engine convert db to ndbGoogle App Engine 将 db 转换为 ndb
【发布时间】:2013-01-22 05:59:31
【问题描述】:

在 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() 方法。如何通过键检索实体?

【问题讨论】:

    标签: google-app-engine


    【解决方案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

    【讨论】:

    • 但实际上,图像字段存在于许多模型中。我想在不使用模型名称的情况下检索图像。我该怎么做?谢谢。
    • 另外,系统会重新启动,所以我不需要做'to_old_key'。我还能使用advertising.key吗?
    • 使用 urlsafe 将对包括祖先在内的整个密钥进行编码,因此无论图像模型是否嵌套,它都应该工作。
    • 好吧,模板引擎抱怨:TemplateSyntaxError: Could not parse the rest: '()' from 'advertisement.key.urlsafe()'
    • 你用的是什么模板引擎?尝试不使用 ()... 在 jinja2 中,您将包括 (),django 他们被排除在外。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多