我们说我的电子邮件地址簿有一个型号:
class contact(db.Model):
email = db.EmailProperty()
image = #Hmm.
我的联系人'图像将存储在Blobstore中,并以各种尺寸提供。
所以,我应该使用db.ReferenceProperty(BlobInfo)
,以便我可以通过以下方式提供服务:
get_serving_url(alice.image.key, size=x)
或者我应该使用db.StringProperty
,以便我不必进行第二次阅读以获取密钥:
get_serving_url(alice.image, size=x)
或者我应该使用db.LinkProperty
作为基本网址,后期修复所需的尺寸:
alice.image+'=sx'
我不会预见需要除钥匙以外的任何东西,所以我认为第二个比第一个更好。
虽然我不确定第三个是否最好,因为我不确定它是否与创建一个唯一的URL一样高效,可以缓存以避免重复生成相同的缩略图 - 或者这是否处理两种情况下都是自动化的?
答案 0 :(得分:1)
经过一些实验,我想我可以回答我自己的问题。
好吧,有点儿。事实证明答案是"这并不是一个真正的问题,从#34开始。虽然get_serving_url()
给人的印象是正在做一些奇特的事情,但实际上是“提供服务的网址”。只不过是提供BlobKey
的后期修复。
更重要的是,提供size=x
只会附加=sx
- 这样做并没有什么特别的,或多或少的效率。我的第二个和第三个选项,实际上是相同的。
最后,__BlobInfo__
实体类型使用BlobKey
作为其关键名称,因此也可以轻松地从另一个访问。
我决定使用,并建议任何有同样困境的人,我的第三个选择:
imgBlob = db.LinkProperty()
然后很容易:
put()