gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:45:52 25 4
gpt4 key购买 nike

老实说:这是我上周在 Django-Users 邮件列表上提出的一个问题。由于我在那里还没有收到任何回复,我将它重新发布到 Stack Overflow 上,希望它在这里得到更多的关注。

我想创建一个易于用户友好的应用程序,
在您自己的应用程序中上传多个/大量文件。用户友好的我
意思是像 Gmail、Flickr 等上传,用户可以选择多个
文件一次在浏览文件对话框中。然后上传文件
顺序或并行以及对所选文件的一个很好的概述
显示在页面上,旁边有一个进度条。 “取消”
上传按钮也是一个可能的选项。

所有这些优点通常是通过使用 Flash 对象来解决的。完全的
客户端有解决方案,例如:SWFUpload
http://swfupload.org/ , 花式上传 http://digitarald.de/project/fancyupload/
, YUI 2 上传者 http://developer.yahoo.com/yui/uploader/并且可能
还有很多。

当然,诀窍是将这些解决方案集成到您的
项目。特别是在像 Django 这样的框架中,如果你愿意,可以加倍
它是可重复使用的。

所以,我有一些想法,但我既不是 Django 专家,也不是
基于 Flash 的上传解决方案。我会在这里分享我的想法,希望
从更有知识和经验的人那里获得一些反馈。
(或者甚至只是一些“我也想要这个!”回复:))

你会注意到我做了一些假设:这是为了保持
(初始)应用范围受控制。这些假设
当然是有争议的:

好吧,我的想法到目前为止:

  • 如果你想批量上传多个文件,你将有一个
    包含每个文件的模型。即该模型将包含一个
    FileField 或一个 ImageField。
    具有多个(但当然有限)数量的 FileFields/的模型
    ImageFields 不需要简单的批量上传恕我直言:如果你有
    具有 100 个 FileFields 的模型,您做错了 :)
    您希望我设想的批量上传的示例:
  • 一个只有一个模型“小册子”和一个文件字段的应用程序,一个
    标题字段(从文件名动态创建)和一个 date_ added
    field 。
  • 带有模型“画廊”和“照片”的照片库应用程序。你选一个
    画廊添加图片,上传图片和新的照片对象
    已创建并将外键设置为所选图库。
  • 能够为您的应用程序配置或扩展应用程序会很好
    最喜欢的 Flash 上传解决方案。我们可以选择以上三个之一作为
    默认设置,但要实现该应用程序,以便人们可以轻松添加
    额外的实现(有点像 Django 可以使用多个
    数据库)。让它与任何特定的客户端解决方案无关。
  • 如果我们需要选择一个开始,也许选择一个
    最小的足迹? (客户端东西的最小下载)
  • 基于 Flash 的异步解决方案(顺序或
    并行)将文件发布到 url。我建议该网址是本地的
    到我们的通用应用程序(因此对于您使用我们的每个应用程序都是相同的
    应用程序中)。该 url 将转到我们的通用应用程序提供的 View 。
  • 该 View 将执行以下操作:创建一个新的模型实例,添加
    文件,可选择做额外的东西并保存实例。
  • DO EXTRA STUFF 是使用我们的应用程序的应用程序想要运行的代码。
    它不必提供任何额外的代码,如果模型只有一个
    FileField/ImageField 标准 View 代码将完成这项工作。
    但是我认为大多数应用程序都会想做一些额外的事情,比如填写
    其他字段:标题、日期添加、外键、多条记录、...
  • 我还没有想过 DO EXTRA STUFF 的机制。只是
    我想到了包装通用应用程序 View ,但这不是开发人员
    友好,因为您必须编写自己的 url 模式和
    自己的看法。然后你必须告诉 Flash 解决方案使用新的 url
    等等...
    我认为可以在这里使用信号之类的东西?
  • 表单/管理员:我仍然很粗略地了解这一切如何最好
    集成在管理或通用 Django 表单/小部件/...
    (这是我缺乏 Django 经验的表现):
  • 对于画廊/照片应用程序:
    您可以在图库详细信息上提供大量照片上传小部件
    形式。但是如果 Gallery 实例还没有保存呢?文件
    上传 View 将无法在照片上设置外键
    实例。我看到 auth 应用程序,当您创建用户时,首先询问
    用户名和密码,然后才为您提供更大的
    填写电子邮件地址、选择角色等的表格。我们可以做类似的事情
    那。
  • 对于只有一个模型的应用程序:
    你如何在 Django 管理员中提供一个表单来做你的质量
    上传?你不能用你的模型的细节形式来做,那就是
    仅针对一个模型实例。

  • 之前可能还有几十个问题需要回答
    我什至可以开始使用这个应用程序。所以请告诉我你的想法!给
    我输入!你喜欢什么?什么不是?你会怎么做?是
    这个想法靠谱吗?哪里不是?

    谢谢!

    最佳答案

    大约一个月前,我刚刚为此发布了一个简单的应用程序:django-uploadify .

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

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

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

    例如,假设您有一个模型“媒体”来处理所有用户上传的文件......
    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有关如何设置和创建信号处理程序(客户端/服务器)的信息。

    关于上面的概念实现,这里有几点需要考虑:
  • 让应用程序自动创建“文件模型”实例可能不像人们可能已经拥有他们正在使用的自己的模型那样强大
  • 如果你想实现任何类型的安全或身份验证,你需要一个开放的系统而不是“自动创建”类型
  • 我真的认为信号/事件是处理这个问题的方法,也可以处理你提到的“做其他事情”部分。
  • 我的结论是,在 Django 实现表单小部件的意义上,多重上传永远不可能真正成为表单小部件。 1 个文件很可能由 1 个模型实例表示(有一些异常(exception)),这意味着我们最终会出现 1 个小部件可以表示 N 个模型实例的情况。但是,Django 设置为小部件在 1 个实例中代表 1 个字段的 1 个值。它只是不适合大多数用例将其作为小部件(因此我采用模板标记路线)。
  • 关于Django 应用程序,可以为其他应用程序提供用户友好的、多/批量文件上传功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1627165/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com