У меня есть объект, который состоит из String
и BlobReferenceProperty
:Не удается получить пятно с помощью BlobReferenceProperty
class NameKeyPair(db.Model):
human_readable_name = db.StringProperty()
blobkey = blobstore.BlobReferenceProperty()
Когда я сохранить текст в сгустке, я поставил BlobKey так:
...
#Create the file
file_name = files.blobstore.create(mime_type='text/plain')
#Open the file and write to it
with files.open(file_name, 'a') as f:
f.write(data.encode('utf8'))
#Finalize the file
files.finalize(file_name)
#Get the file's blob key
blobkey = files.blobstore.get_blob_key(file_name)
#store it in DB
nameKeyPair = NameKeyPair()
nameKeyPair.blobkey = blobkey
nameKeyPair.human_readable_name = human_readable_name
nameKeyPair.put()
...
human_readable_name
- это строка, которую я посылаю пользователю. Теперь, когда пользователь отправляет мне имя обратно, я хочу, чтобы вернуть текст сгустка:
...
human_readable_name = self.request.get('human_readable_name')
q = NameKeyPair.all()
q.filter("human_readable_name =", human_readable_name)
blobkey = ""
for p in q.run(limit=1):
blobkey = p.blobkey
blob_info = blobstore.BlobInfo.get(blobkey)
self.send_blob(blob_info)
Это не работает. Apppot просто говорит «ошибка сервера».
Если я распечатаю свою переменную blobkey
, она говорит <google.appengine.ext.blobstore.blobstore.BlobInfo object at 0x54dbe8bfa91b53a0>
Не должно быть blobkey?
Эта страница: https://developers.google.com/appengine/docs/python/blobstore/blobkeyclass говорит: «Вы можете получить объект BlobInfo с помощью BlobKey, передав ключ методу класса BlobInfo.get()».
Вот почему я передал свой blobkey в BlobInfo.get
. Но если мой «blobkey» на самом деле уже является объектом BlobInfo
, возможно, мне не нужно это делать. Я попытался передать его непосредственно send_blob
вместо:
self.send_blob(blobkey)
Но я получаю тот же результат.
И на этой странице: https://developers.google.com/appengine/docs/python/blobstore/, которая показывает пример кода: self.send_blob(blob_info)
Кажется, что это должно быть все, что мне нужно ... Но это просто не работает. Есть идеи?
Есть ли более подробная ошибка в журнале? – Greg