現在、次のように、特定の製品のアップロードされた画像を保存しています。
class Product(db.Model):
images= db.ListProperty(db.Blob)
# More properties ...
そして、私はそれらを取得します:
class ImageHandler(webapp2.RequestHandler):
def get(self):
productKey = cgi.escape(self.request.get('id'))
if productKey:
try:
product = Product.get(db.Key(productKey))
if product and product.images:
idx = 0 # if not img is passed, return the first one
imageIndex = cgi.escape(self.request.get('img'))
if imageIndex:
imageIndex = int(imageIndex)
if imageIndex > 0 and imageIndex < len(product.images):
idx = imageIndex
self.response.headers['Content-Type'] = 'image/jpeg'
self.response.out.write(str(product.images[idx]))
return
self.redirect('/img/image-missing.jpg')
return
except:
self.redirect('/img/image-404.jpg')
return
self.redirect('/img/image-404.jpg')
を呼び出すことによって/image?id={{productkey}}&img={{imageindex}}
。
現在検討中:
- データストアのコスト
- CPU/メモリ/時間のコスト
- 別のアプリ/データストア、または amazon などへの移行の可能性があります。
- サムネイル表示などのためにサイズ変更された画像を返す機能。
- 考慮していないその他の要因
このままにしておくべきですか、それとも のみを含む画像用の別のモデルを用意しdb.BlobProperty
、db.ListProperty(db.Key)
代わりに製品モデルに を使用する必要がありますか?
画像を製品内のブロブとして保持すると、製品を get() したときに自動的にフェッチされるのか (これは悪いことです)、それとも別の画像エンティティを取得する必要がないためデータストアへのアクセスが減るのかはわかりません。
最後に、この python コード (多くのリダイレクト、リターン、および条件) を改善するための提案も歓迎します。ありがとうございました。