GAE Blobstore的create_upload_url()的一些说明

时间:2013-04-17 12:42:26

标签: google-app-engine django-admin blobstore

我正在使用GAE Blobstore为我的Django应用上传和提供图片。对于管理员用户,可以通过将图像包装在Django模型Image中并为此模型提供标准管理功能来进行维护:添加,更新,删除。

要执行实际上传,我修改了图片模型的change_form.html模板,并将{{ form_url }}替换为{{ blobstore_url}}。通过覆盖{{ blobstore_url }}的{​​{1}}来设置render_change_form

我注意到,通过调用ImageAdmin,我获得了GAE Blobstore上传工具的编码网址和函数的参数(" / admin / some / url")实际上是GAE / Blobstore在完成上传后重定向的URL。

与问题不太相关,但我注意到的一点是,在我的第一种方法中,我只是覆盖了create_upload_url("/admin/some/url")的值,但这似乎不起作用,因为表格的动作没有设定;它要么被覆盖在其他地方,要么被忽略。

虽然这有效但主要的缺点是这种方法要求我实施" admin / some / url"作为一个视图我可以处理模型Image所需的添加或更改,这实际上是代码重复,因为默认管理员已经支持这些功能。

所以我的问题是,为了在完成上传后运行Image模型的验证和数据库更新的标准管理功能,传递给{{ form_url }}的正确URL是什么?

修改

或者,在默认管理操作(例如插入或更新)完成后执行上传可能是更好的设计......

1 个答案:

答案 0 :(得分:0)

您将表单通常发布到的admin URL传递给create_upload_url()。

这样文件将上传到Blobstore,然后表单将被重定向到正常的管理表单处理URL。

然而,除非你使用django-nonrel,否则这不会“正常工作”。在重定向目标中,您需要将GAE blobstore url保存到模型中,默认情况下django不会发生这种情况。如果你想这样做,你可以考虑整合django-nonrel的GAE存储后端。

https://github.com/dragonx/djangoappengine/blob/1.4-devappserver2/djangoappengine/storage.py