首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

django 实现文件下载功能

一、概述 在实际的项目中很多时候需要用到下载功能,如导excel、pdf或者文件下载,当然你可以使用web服务自己搭建可以用于下载的资源服务器,如nginx,这里我们主要介绍django中的文件下载。...,StreamingHttpResponse,FileResponse 详情,请参考链接 https://www.jb51.net/article/137790.htm 本文主要介绍StreamingHttpResponse...实现方式 二、实际操作 新建项目 新建一个Django项目untitled1,这里的是Django 2.x版本。..., HttpResponse from django.http import StreamingHttpResponse import os def index(request):     return...Found the File")     def file_iterator(file_path, chunk_size=512):         """         文件生成器,防止文件过大,导致内存溢出

3.9K20

Django之文件上传下载

else: return render(request, 'polls/upload.html') 处理上传文件就是往服务器上生成一个文件,并将上传的文件内容写到新的文件中。...) as f: c = f.read() return HttpResponse(c) 这种方式简单粗暴,适合小文件的下载,但如果这个文件非常大,这种方式会占用大量的内存,甚至导致服务器崩溃...StreamingHttpResponse对象取代HttpResponse对象,StreamingHttpResponse对象用于将文件流发送给浏览器,与HttpResponse对象非常相似,对于文件下载功能...,使用StreamingHttpResponse对象更合理。...因此,更加合理的文件下载功能,应该先写一个迭代器,用于处理文件,然后将这个迭代器作为参数传递给StreaminghttpResponse对象,如:    from django.http import

3.2K40
您找到你想要的搜索结果了吗?
是的
没有找到

django项目中导出数据到excel文件并实现下载的功能

a.download = '<文件命名 '; a.href = blobUrl; a.click(); document.body.removeChild(a); } 补充知识:Python Django...实现MySQL百万、千万级的数据量下载:解决memoryerror、nginx time out 前文 在用Django写项目的时候时常需要提供文件下载的功能,而Django也是贴心提供了几种方法:FileResponse...、StreamingHttpResponse、HttpResponse,其中FileResponse和StreamingHttpResponse都是使用迭代器迭代生成数据的方法,所以适合传输文件比较大的情况...;而HttpResponse则是直接取得数据返回给用户,所以容易造成memoryerror和nginx time out(一次性取得数据和返回的数据过多,导致nginx超时或者内存不足),关于这三者,DJango...db.cursor.fetchone() if row is None: break 可以看到就是通过while True来实现不断地取数据下载,有效避免一次性从MySQL取出内存不足报错,又或者取得过久导致

4.8K10

聊点Python:在Django中利用zipfile,StringIO等库生成下载的文件​

最近在django中要用到文件下载的功能,通过查找,发现以下几种方式,就收集在一起,供日后方便查找。 第一种方式:创建一个临时文件。可以节省了大量的内存。...如果文件非常大时,最简单的办法就是使用静态文件服务器,比如Apache或者Nginx服务器来处理下载。...不过有时候,我们需要对用户的权限做一下限定,或者不想向用户暴露文件的真实地址,或者这个大内容是临时生成的(比如临时将多个文件合并而成的),这时就不能使用静态文件服务器了。...我们在django view中,需要用StreamingHttpResponse这两个类。...完整的代码如下: from django.http import StreamingHttpResponse def big_file_download(request): # do something

1.9K40

django之文件上传下载等相关

f: c = f.read() return HttpResponse(c) 这种方式简单粗暴,适合小文件的下载,但如果这个文件非常大,这种方式会占用大量的内存,甚至导致服务器崩溃...推荐使用 StreamingHttpResponse对象取代HttpResponse对象,StreamingHttpResponse对象用于将文件流发送给浏览器,与HttpResponse对象非常相似,...对于文件下载功能,使用StreamingHttpResponse对象更合理。...因此,更加合理的文件下载功能,应该先写一个迭代器,用于处理文件,然后将这个迭代器作为参数传递给StreaminghttpResponse对象,如: from django.http import StreamingHttpResponsedef...(file_iterator(file)) return response from django.http import StreamingHttpResponse def download_file

3.1K30

django:自定义静态文件服务器

'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages...get_real_path 是把相对路径转成硬盘的实际路径,自已实现吧 具体看代码: from django.http import HttpResponse, StreamingHttpResponse...(request, path): short_file_name, real_file_path = get_real_path(request, path) response = StreamingHttpResponse...当我们把实现改成这样,很快,你会发现服务器爆炸了。 一般来说,浏览器请求静态资源会带上一个头 If-Modified-Since,文件服务器会根据这个头,判定文件是否已经修改。...我们的文件服务器漏了这一步。所以,每次请求,服务端都会把文件读取任劳任怨的重新来一次。这样用户体验很差。尤其是图片用户。 实现304 可爱的django给我们提供了一个装饰器 condition。

1.3K10

介绍bigpipe以及bigpipe在django上的实现

而bigpipe则是服务器接受到请求之后,立马返回一段骨架html,但是不包括闭合的body和html标签,这时候response并没有结束,每当服务器端准备好一块数据,就立即flush给浏览器,浏览器在收到骨架...然后就是接收请求的django view: import time from django.http import StreamingHttpResponse from django.template.loader...import render_to_string def test(request): return StreamingHttpResponse(stream_response_generator...()) 由于我们不立即返回整个请求,所以并不直接返回HttpResponse对象,而是返回StreamingHttpResponse对象,并且这里的stream_response_generator.../pypi/django-bigpipe django关于bigpip的一些内容: http://www.slideshare.net/gagedark/even-faster-django-27352247

1.2K80

如何仅用 Django 实现反向代理?

但现在条件苛刻,服务器没有 nginx,也没有 root 权限,意味着你无法编译安装 nginx,且只有一个端口 80 开放访问。怎么让这个 80 端口的某一请求转发到其他端口的 http 服务上?...本文分享如何仅用 Django 实现反向代理。...5、克隆的请求被发送到上游服务器,也就是 upstream。 6、在收到来自上游的响应后,视图将对其进行处理以确保正确设置所有 headers。...7、从上游服务器接收到的响应被转换为 django.http.HttpResponse。对于二进制文件,使用 StreamingHttpResponse 来减少内存使用。...http 的方式共享给他人下载使用,使用 django-revproxy 这个轮子,可以让这个功能集成在 Django 的某一个路由中,在开发者服务器部署,大家用起来是着实方便。

1.5K10
领券