首页 / 知识
关于python:在Django中提供动态生成的ZIP存档
2023-04-15 15:16:00

Serving dynamically generated ZIP archives in Django如何在Django中为用户提供动态生成的ZIP存档? 我正在建立一个站点,用户可以在其中选择可用书籍的任意组合,并将其下载为ZIP存档。 我担心为每个请求生成这样的存档会降低我的服务器的爬网速度。 我还听说Django当前尚没有很好的解决方案来提供动态生成的文件。 解决方法如下。
使用Python模块zipfile创建zip存档,但是在文件中指定StringIO对象(ZipFile构造函数需要类似文件的对象)。添加您要压缩的文件。然后在Django应用程序中,将 但是请注意,在每个请求上创建zip存档都是一个坏主意,这可能会杀死您的服务器(如果存档很大,则不计算超时)。基于性能的方法是将生成的输出缓存在文件系统中的某个位置,并仅在源文件已更改时才重新生成它。更好的主意是预先准备存档(例如,按cron作业),并让您的Web服务器将其作为常规静态变量来提供。 这是执行此操作的Django视图:
这里有许多答案建议使用
对于python3,我不推荐使用io.ByteIO,因为不推荐使用StringIO来实现此目的。希望能帮助到你。
Django不会直接处理动态内容(特别是Zip文件)的生成。这项工作将由Python的标准库完成。您可以在此处了解如何在Python中动态创建Zip文件。 如果您担心它会降低服务器的速度,那么如果您希望有许多相同的请求,则可以缓存这些请求。您可以使用Django的缓存框架来帮助您。 总体而言,压缩文件可能会占用大量CPU资源,但Django不应比其他Python网络框架慢。 我使用了Django 2.0和Python 3.6。
无耻的插件:您可以将django-zipview用于相同的目的。
在
该模块生成并流式传输存档:https://github.com/allanlei/python-zipstream (我没有与开发联系。只是考虑使用它。) 我建议使用单独的模型来存储这些临时zip文件。您可以即时创建zip,使用filefield保存到模型,最后将url发送给用户。 好处:
您不能只写一个指向" zip服务器"的链接吗?为什么zip存档本身需要从Django提供?至少在我看来,这里确实需要90年代的CGI脚本来生成一个zip并将其吐出到stdout。 |
最新内容
相关内容
linux命令暂停下载?
linux命令暂停下载?,系统,代码,暂停,第一,服务,管理,命令,进程,程序,接线,linux下nginx停止命令首先,连接相应linux主机,进入到linux命令行状态linux命令下载工具?
linux命令下载工具?,工具,网络,代理,代码,简介,位置,系统,第一,下载工具,文件,Linux下多线程下载工具MWget和Axel使用介绍1、wget是linux下一配置网关的命令linux?
配置网关的命令linux?,地址,系统,网络,代码,信息,环境,命令,网关,服务,电脑,如何在Linux上添加或更改默认网关目录部分1:使用终端打开终端。浏linux下载打包命令行?
linux下载打包命令行?,软件,系统,名称,工具,官网,文件,命令,目录,下面,表示,linux命令行下如何下载应用软件(linux怎么下载软件)软件的卸载主linux命令行大全下载?
linux命令行大全下载?,系统,地址,工作,信息,管理,技术,命令,名家,评论,数据,《Linux命令行大全》pdf下载在线阅读,求百度网盘云资源1、本书是linux命令下载jdk?
linux命令下载jdk?,官网,系统,地址,工作,工具,服务,管理,环境,网上,地方,怎样在Linux系统中下载和安装OpenJDK包手动安装jdk,首先需要下载jdk,记linux中的下载命令行?
linux中的下载命令行?,软件,系统,网络,电脑,名称,密码,官网,位置,服务,代理,linux命令行下的ftp多文件下载和目录下载查看是否安装vsftpd,如果linux命令行大全下载?
linux命令行大全下载?,系统,地址,工作,信息,管理,技术,命令,名家,评论,数据,《Linux命令行大全》pdf下载在线阅读,求百度网盘云资源1、本书是linux命令下载jdk?
linux命令下载jdk?,官网,系统,地址,工作,工具,服务,管理,环境,网上,地方,怎样在Linux系统中下载和安装OpenJDK包手动安装jdk,首先需要下载jdk,记linux服务器下载命令?
linux服务器下载命令?,服务,密码,系统,档案,工具,网络,公共,百度,地址,认证,linux下lftp连接ftp服务器上传下载命令连接ftp服务器 格式:ftp [holinux查询网关命令?
linux查询网关命令?,网络,信息,地址,环境,系统,网关,名字,中心,状态,命令,linux怎么查看网关1、打开终端窗口。输入以下命令并按下回车键 routlinux多线程下载命令?
linux多线程下载命令?,软件,工具,平台,中心,系统,代理,网络,网站,手机,官方网站,从linux服务器中下载或上传文件wget是linux下一个从网络上自