1

次のように、デフォルトの高さと幅を定義する方法をユーザーに提供したいImgPropertyを作成しています。

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

その後:

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

次に、画像は指定された高さ、幅の値にサイズ変更されたデータベースに保存されます。ImgProperty自体はBlobPropertyをサブクラス化します。これらの2つの属性をProperty._attributesに追加して、機能させることはできますか?それともそれを台無しにしない方がいいですか?私がそれを行うために見るもう1つの方法は、フィールドの高さと幅を持つ中間モデルを作成し、__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 High Performance Image serving API を利用します。

ドキュメントから: この URL 形式では動的なサイズ変更とトリミングが可能であるため、サーバーにさまざまなサイズの画像を保存する必要はありません。画像は、高度に最適化された Cookie のないインフラストラクチャから低レイテンシーで提供されます。

例を次に示します

詳細については、次のブログ投稿を参照してください: http://googleappengine.blogspot.nl/2010/08/multi-tenancy-support-high-performance_17.html

于 2012-09-25T23:46:24.657 に答える