Ric*_*ber 5 python google-app-engine blobstore app-engine-ndb
我有一个表单,在文本字段之间包含一个上传图片的元素.
我想将blob存储在blobstore中并ndb.Model使用我的model()引用它ndb.BlobKeyProperty().此链接中
显示的方法使用上传处理程序(),该处理程序从以这种方式创建的链接中调用:UploadHandler
upload_url = blobstore.create_upload_url('/upload')
Run Code Online (Sandbox Code Playgroud)
upload_url是为上传blob而创建的页面中的表单操作.但是,我的表单包含未在UploadHandlerpost方法中处理的其他字段.我找到的临时解决方案是为我的表单创建一个处理程序,该处理程序继承自我的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')
...
Run Code Online (Sandbox Code Playgroud)
这个方法有效,除了我必须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)
Run Code Online (Sandbox Code Playgroud)
问题:如何使用UploadHandler从不同页面调用的单个上载处理程序(例如:)来执行上载blob任务?我知道对于经验丰富的GAE程序员来说这可能非常简单,但我还没有找到解决方案.
简短回答:是的,可以。
处理程序只是解析您的上传表单,然后根据信息执行操作的代码。
从技术上讲,即使对于不同的上传,您也可以使用一种表单,但这实际上取决于不同程度以及您是否希望拆分代码。
例如,如果您的 form1 上传“名字”“姓氏”“最喜欢的颜色”,而您的 form2 上传“名字”“姓氏”“最喜欢的号码”,那么您的 /upload 处理程序可以简单地读取参数并以不同的方式处理它们。
if (req.getParameter("Favorite_Number") != null) {做任何事}
else if (req.getParameter("Favorite_Color") != null) {做任何事}
这只是一个设计问题。您是否可以使用一个处理程序的问题,答案是肯定的。但是,如果功能不同,建议使用不同的。
| 归档时间: |
|
| 查看次数: |
450 次 |
| 最近记录: |