我有一个表单,其中包含文本字段和一个上传图片的元素。
我想将blob存储在blobstore中,并在我的模型(ndb.Model
)中使用ndb.BlobKeyProperty()
进行引用。
此链接中展示的方法使用一个上传处理程序(UploadHandler
),该处理程序是通过这种方式创建的链接调用的:
upload_url = blobstore.create_upload_url('/upload')
upload_url
是创建用于上传blob的页面中的表单操作。然而,我的表单包含其他未在UploadHandler
post方法中处理的字段。
我找到的临时解决方案是创建一个处理程序,它继承自我的BaseHandler以及BlobstoreUploadHandler:
class EditProfile(blobstore_handlers.BlobstoreUploadHandler, BaseHandler)
def get(self):
params['upload_url'] = blobstore.create_upload_url('/upload_blob1')
... fields ...
def post(self):
upload_blob = self.get_uploads()
blob_key = upload_blob[0].key()
value_field1 = self.request.POST.get('field1')
value_field2 = self.request.POST.get('field2')
value_field3 = self.request.POST.get('field3')
...
这种方法是可行的,但我必须在main.py
中为每个需要上传blob的页面定义一个新的处理程序:
app = webapp2.WSGIApplication([ ('/upload_blob1', handlers.EditProfile),
('/upload_blob2', handlers.EditBlob2Handler),
('/serve/([^/]+)?', handlers.ServeHandler) ],
debug=os.environ['SERVER_SOFTWARE'].startswith('Dev'), config=webapp2_config)
问题:我如何使用一个单一的上传处理程序(例如:UploadHandler
),使其从不同的页面调用以执行上传 blob 任务?我知道对于有经验的 GAE 程序员来说,这可能非常简单,但我还没有找到解决方案。
UploadHandler
),同时被handlers.EditProfile
和handlers.EditBlob2Handler
使用,这是否可能?如何实现? - Richard Haber