开发者

Storing BlobKey in DataStore with app engine

开发者 https://www.devze.com 2023-01-14 00:01 出处:网络
So I decided to rewrite my image gallery because of the new high performance image serving thing. That meant using Blobstore which I have never used before. It seemed simple enough until I tried to st

So I decided to rewrite my image gallery because of the new high performance image serving thing. That meant using Blobstore which I have never used before. It seemed simple enough until I tried to store the BlobKey in my model.

How on earth do I store reference to a blobstorekey in a Model? Should I use string or should I use some special property that I don't know about? I have this model

class Photo(db.Model):
 date = db.DateTimeProperty(auto_now_add=True)
 title = db.StringProperty()
 blobkey = db.StringProperty()
 photoalbum = db.ReferenceProperty(PhotoAlbum, collection_name='photos') 

And I get this error: Property blobkey must be a str or开发者_StackOverflow unicode instance, not a BlobKey

Granted, I am a newbie in app engine but this is the first major wall I have hit yet. Have googled around extensively without any success.


The following works for me. Note the class is blobstore.blobstore instead of just blobstore.

Model:

from google.appengine.ext.blobstore import blobstore

class Photo(db.Model):
  imageblob = blobstore.BlobReferenceProperty()

Set the property:

from google.appengine.api import images
from google.appengine.api import blobstore
from google.appengine.ext.webapp import blobstore_handlers

class UploadHandler(blobstore_handlers.BlobstoreUploadHandler):
  def post(self):
    upload_files = self.get_uploads('file')  # 'file' is file upload field in the form
    blob_info = upload_files[0]
    entity = models.db.get(self.request.get('id'))
    entity.imageblob = blob_info.key()

Get the property:

image_url = images.get_serving_url(str(photo.imageblob.key()))


Instead of a db.StringProperty() you need to use db.blobstore.BlobReferenceProperty (I think)

I'm still trying to figure this thing out as well, but thought I'd post some ideas.

Here are the reference pages from Google: http://code.google.com/appengine/docs/python/datastore/typesandpropertyclasses.html

http://code.google.com/appengine/docs/python/datastore/typesandpropertyclasses.html#BlobReferenceProperty

0

精彩评论

暂无评论...
验证码 换一张
取 消