Django应用程序处理按会话和捆绑包分组的附件(临时上载)。即使是匿名用户
django-session-attachments的Python项目详细描述
此应用程序旨在与Django中的附件一起工作。
基本上使用附件和使用普通附件是一样的 上传,除了一些区别:
- 附件“属于”他们上传的客户端。换句话说, 附件必须是私有的,并且不能被公共访问
- 附件被组织成“捆绑包”如果你的客户决定 在应用程序的不同部分中使用不同的附件集 (例如,他/她同时写了几封电子邮件或请求, 显然不想在收件人之间共享他/她的附件。)
- 附件是临时的必须有简单的方法来移除附件 手动或到期。
- 即使未经验证的用户也必须可以使用附件。是因为我们 具体细节这也是我们创建此应用程序的主要原因
- 不可能在同一个文件中存储两个同名的附件 捆绑。新附件覆盖上一个附件。看起来很正常 给定应用程序用例的限制
安装和配置
从pypi或github安装应用程序:
$ pip install django-session-attachments # or $ pip install git://github.com/NetAngels/django-session-attachments.git#egg=django-session-attachments
将新应用程序添加到设置文件:
INSTALLED_APPS = [ 'django.contrib.staticfiles', ... 'session_attachments', ... ]
在urlconf(urls.py)中添加新行:
urlpatterns = patterns('', ... url(r'^attachments/', include('session_attachments.urls')), ... )
有一个单独的django模型来保存附件,因此您应该键入:
./manage.py syncdb session_attachments
如何使用
如果您的应用程序在localhost:8000上可用,您将得到以下结果 从前端使用的URL数。可能会更容易 使用jquery forms扩展或其他东西异步处理后端 类似的。
为了简单起见,下面的示例使用curl因为附件是绑定的 对于会话,在curl调用之间保留会话cookie是很重要的。 我们通过将--cookie session.txt --cookie-jar session.txt选项传递给 旋度。
请注意,除非csrf中间件是 在设置中禁用。
将文件上载到捆绑包
将文件post数据上载到/attachments/<bundle_id>/url。表格必须 至少包含一个文件字段。文件字段的名称可以是任意的,因为它们 被应用程序忽略:
$ echo spam > spam.txt $ echo egg > egg.txt $ curl --cookie session.txt --cookie-jar session.txt -F attach1=@spam.txt -F attach2=@egg.txt -X POST http://localhost:8000/attachments/foo/ [{"name": "egg.txt", ...}, {"name": "spam.txt", ...}]
获取捆绑包中的附件列表
$ curl --cookie session.txt --cookie-jar session.txt -X GET http://localhost:8000/attachments/foo/ $ [{"mimetype": "text/plain", "size": 4, "name": "egg.txt", "created": "2011-12-29 04:12"}, {"mimetype": "text/plain", "size": 5, "name": "spam.txt", "created": "2011-12-29 04:12"}]
返回json格式的dict列表。
从捆绑包下载文件
$ curl --cookie session.txt --cookie-jar session.txt -X GET http://localhost:8000/attachments/foo/spam.txt/ spam
从捆绑包中删除附件
$ curl --cookie session.txt --cookie-jar session.txt -X POST http://localhost:8000/attachments/foo/spam.txt/delete/ [true]
清理整个包裹
$ curl --cookie session.txt --cookie-jar session.txt -X POST http://localhost:8000/attachments/foo/delete/ [[true]]
清除过期附件的管理命令
有一个管理命令从 捆绑。要设置删除的阈值,您可以通过天数:
./manage.py remove_outdated_attachments --older-than=3