【问题标题】:Some clarification of GAE Blobstore's create_upload_url()GAE Blobstore 的 create_upload_url() 的一些说明
【发布时间】:2013-04-17 12:42:25
【问题描述】:

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

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

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

与问题无关,但我也注意到,在我的第一种方法中,我只是覆盖了 {{ form_url }} 的值,但这似乎不起作用,因为没有设置表单的操作;它要么被其他地方覆盖,要么被忽略。

虽然这可行,但主要缺点是这种方法需要我将“admin/some/url”实现为一个视图,我可以在其中处理所需的模型图像的添加或更改,这实际上是代码的重复默认管理员已经支持这些功能。

所以我的问题是传递给create_upload_url() 的正确 URL 是什么,以便在上传完成后运行图像模型的验证和数据库更新的标准管理功能?

编辑

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

【问题讨论】:

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


    【解决方案1】:

    您需要将表单通常发布到的管理 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

    【讨论】:

    • 谢谢。我已经找到了我在项目中集成的 non-rel storage.py 的需求。如果我想在正常的管理处理之后进行上传怎么办。这可能吗?
    • 这可能是可能的,但我怀疑你想走这条路。您必须在正常的管理员 POST 请求中处理实际上传。在这种情况下,您必须创建一个新的 storage.py 上传处理程序,该处理程序将使用 blobstore 文件 API 将上传的文件写入 blobstore ...或者可能调用 urlfetch() 到上传 url(它不会使用 HTTP 重定向)。
    • 好的,清楚。您能否举例说明我如何在管理员中获取模型的正常表单处理 url,例如 MyModel 和添加 MyModel 实例的添加操作...?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2013-02-09
    • 2015-06-22
    • 2011-06-17
    • 2014-10-20
    相关资源
    最近更新 更多