這是Django on Google App Engine: cannot upload images獲取谷歌應用程序在Django視圖引擎BLOB信息
我得到了圖像,GAE Blob存儲區工作的上載部分的後續問題。下面是我所做的:
在models.py
我創建了一個模型PhotoFeature
:
class PhotoFeature(models.Model):
property = models.ForeignKey(
Property,
related_name = "photo_features"
)
caption = models.CharField(
max_length = 100
)
blob_key = models.CharField(
max_length = 100
)
在admin.py
我創建了change_form的渲染的覆蓋管理員條目,以便允許正確的行動對的插入Blob存儲上傳網址:
class PhotoFeatureAdmin(admin.ModelAdmin):
list_display = ("property", "caption")
form = PhotoFeatureForm
def render_change_form(self, request, context, *args, **kwargs):
from google.appengine.ext import blobstore
if kwargs.has_key("add"):
context['blobstore_url'] = blobstore.create_upload_url('/admin/add-photo-feature')
else:
context['blobstore_url'] = blobstore.create_upload_url('/admin/update-photo-feature')
return super(PhotoFeatureAdmin, self).render_change_form(request, context, args, kwargs)
當我使用標準Django的,我想用Django的意見,處理結果一旦GAE在BlobstoreUploadHandler
代替已經更新了BLOBSTORE。我創建了以下幾點看法(根據render_change_form方法)和更新urls.py
:
def add_photo_feature(request):
def update_photo_feature(request):
這一切工作很好,但一旦我進入視圖的方法,我有點失落。如何從請求對象獲取Blob密鑰,以便我可以使用PhotoFeature存儲它?我使用標準的Django,而不是Django non-rel。我發現this有關的問題,但它似乎不包含解決方案。我還檢查了傳入視圖的request
對象,但找不到與blob密鑰相關的任何內容。
編輯:
Django的請求對象包含FILES字典,這將給我的InMemoryUploadedFile
一個實例。我相信,不知怎的,我應該能夠檢索的blob鍵...
編輯2:
只是要清楚:上傳的照片出現在Blob存儲;那部分工作。它只是從Blobstore那裏得到鑰匙,這裏缺少這個。
編輯3:
按丹尼爾的建議,我從djangoappengine項目,該項目包含了建議的上傳處理程序添加storage.py並把它添加到我的SETTINGS.PY。嘗試上傳時,會導致以下異常:
'BlobstoreFileUploadHandler' object has no attribute 'content_type_extra'
您是否閱讀過GAE的第一個教程? https://developers.google.com/appengine/docs/python/gettingstartedpython27/ – Lipis
是的。 AFAIK它不包括我遇到的問題與上述問題。 – Roger
不,它沒有完全覆蓋你要求的東西..但它涵蓋了GAE如何處理模型和你應該使用哪種屬性的一些基礎知識!根據我的理解,您試圖將Django應用程序移植到App Engine中。爲此,您必須使用GAE屬性https://developers.google.com/appengine/docs/python/ndb/屬性#類型 – Lipis