如何在Django中为用户提供动态生成的ZIP存档?

我正在做一个网站,在那里用户可以 Select 任何可用的书籍组合,并以ZIP存档的形式下载它们.我担心 for each 请求生成这样的存档会使我的服务器变得非常缓慢.我还听说Django目前没有一个很好的解决方案来服务动态生成的文件.

推荐答案

解决方案如下.

使用Python模块zipfile创建zip存档,但作为文件指定StringIO对象(zipfile构造函数需要类文件对象).添加要压缩的文件.然后,在您的Django应用程序中,返回HttpResponse中的StringIO对象的内容,将mimetype设置为application/x-zip-compressed(或至少application/octet-stream).如果您愿意,您可以设置content-disposition头,但这应该不是必须的.

但是要注意,在每个请求上创建zip存档是个坏主意,这可能会杀死你的服务器(如果存档很大,则不计算超时).性能方面的方法是将生成的输出缓存在文件系统中的某个位置,并仅在源文件发生更改时重新生成.更好的办法是提前准备归档文件(例如,通过cron job),并让您的web服务器像往常一样为它们提供服务.

Django相关问答推荐

如何根据属性的 Select 对查询集进行排序

Django www.example.com从常量列表中删除值

Django Admin中显示的DateField下面的小提示是什么?

如何在Django中将可选参数传递给视图?

如何使用邮箱确认码创建django注册

如何在Django中制作一个不 Select 以前日期的日期 Select 器

Django celery 页面给出 404

遍历django模板中的外键相关表

Django JSONField 过滤

relation "django_site" does not exist

具有基于类的视图的 cache_page

为用户添加自定义权限

在 virtualenv Ubuntu 12.10 中使用 pip 安装 lxml 错误:command 'gcc' failed with exit status 4

在 Django 管理页面中注册应用程序中的每个表/类

Django 默认=timezone.now + delta

Django模型字段按变量

如何仅在某些情况下禁用 Django 的 csrf 保护?

登录后django重定向不起作用next不发布?

RemovedInDjango18Warning:不推荐创建没有fields属性或 exclude属性的 ModelForm

Django:必须使用对象 pk 或 slug 调用通用详细视图