1

我正在编写 ImgProperty,我想在其中为用户提供一种定义默认高度和宽度的方法,如下所示:

class MyModel(ndb.Model):
  img = ImgProperty(height=32, width=32)

进而:

m = MyModel(img='https://example.com/my-photo')

然后图像将保存到调整大小为给定高度、宽度值的数据库中。ImgProperty 本身是 BlobProperty 的子类。我可以将这两个属性添加到 Property._attributes 并使其工作吗?还是最好不要惹它?我看到的另一种方法是创建一个具有字段高度和宽度的中间模型,并将__init__方法添加到 ImgProperty。像这样的东西:

class ImgModel(ndb.Model):
  height = ndb.IntegerProperty()
  width = ndb.IntegerProperty()

class ImgProperty(ndb.BlobProperty):
  def __init__(self, **kwds):
        super(ImgProperty, self).__init__(ImgModel, **kwds)

我不确定这种方式是否允许像img = ImgProperty(height=32, width=32).

4

2 回答 2

3

我可以回答你关于构造函数签名的问题。您应该可以按以下方式执行此操作:

class ImgProperty(ndb.BlobProperty):
  def __init__(self, height=32, width=32, **kwds):
    self.height = height
    self.width = width
    super(ImgProperty, self).__init__(**kwds)

对于其余部分,我想您正在关注文档:https ://developers.google.com/appengine/docs/python/ndb/subclassprop

我真的无法帮助您调整大小(使用图像 api);但是我想知道您是否最好在将数据存储到属性值之前手动进行调整大小调用,以避免对图像 api 进行不必要的额外调整大小调用;自动属性转换非常强大,但有时可能会进行冗余调用。

祝你好运!

于 2012-09-25T23:05:14.940 回答
0

您还可以保存包含大小的 get_serving_url。通过这种方式,您可以使用 Google 提供图像的 Google 高性能图像服务 API。

来自文档:此 URL 格式允许动态调整大小和裁剪,因此您无需在服务器上存储不同的图像大小。图像通过高度优化的无 cookie 基础架构以低延迟提供。

这是一个例子:https ://lh6.ggpht.com/lOghqU2JrYk8M-Aoio8WjMM6mstgZcTP0VzJk79HteVLhnwZy0kqbgVGQZYP8YsoqVNzsu0EBysX16qMJe7H2BsOAr4j=s70

有关详细信息,请参阅此博客文章:http: //googleappengine.blogspot.nl/2010/08/multi-tenancy-support-high-performance_17.html

于 2012-09-25T23:46:24.657 回答