Django应用程序,可以为其他应用程序提供用户友好的,多/大容量文件上传功能

时间:2009-10-26 20:31:19

标签: django upload

1 个答案:

答案 0 :(得分:12)

我刚刚在一个月前发布了一个简单的应用程序:django-uploadify

它基本上是一个Django模板标记,充当非常漂亮的Uploadify(需要jQuery)的包装器。使用它就像将其添加到模板一样简单......

{% load uploadify_tags }{% multi_file_upload ‘/upload/complete/url/’ %}

标记将在客户端和服务器端(Django信号)触发事件(每个文件1个),以指示何时收到传入文件。

例如,假设您有一个模型'Media'来处理所有用户上传的文件......

def upload_received_handler(sender, data, **kwargs):
    if file:
        new_media = Media.objects.create(
            file = data,
            new_upload = True,
        )
        new_media.save()

upload_recieved.connect(upload_received_handler, dispatch_uid=‘whatever.upload_received’)

查看wiki以获取有关如何设置和创建信号处理程序(客户端/服务器)的信息。


关于上面的概念实施,这里有几点需要考虑:

  • 让应用程序自动创建“文件模型”实例可能不像人们可能已经拥有自己的模型一样强大
  • 如果要实现任何类型的安全性或身份验证,则需要一个开放系统而不是“自动创建”类型
  • 我真的认为信号/事件是解决这个问题的方法,也可以处理你提到的'DO OTHER STUFF'部分。
  • 我的结论是,在Django实现表单小部件的意义上,多上传永远不会真正成为表单小部件。 1个文件最有可能由1个模型实例表示(有一些例外),这意味着我们最终得到的情况是1个窗口小部件可以表示N个模型实例。但是,设置Django以便小部件在1个实例中表示1个字段的1个值。它只是不适合大多数用例将它作为一个小部件(因此我去了模板标记路径)。