一、概述 在实际的项目中很多时候需要用到下载功能,如导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): """ 文件生成器,防止文件过大,导致内存溢出
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
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取出内存不足报错,又或者取得过久导致
由于Django在内部使用Unicode,这意味着从一些来源比如HttpRequest读出来的字符串可能导致潜在的问题。有一些选项用于处理它: 手动将所有Unicode对象编码为兼容的编码。...流式传输大尺寸CSV文件¶ 当处理生成大尺寸响应的视图时,你可能想要使用Django的StreamingHttpResponse类。...例如,通过流式传输需要长时间来生成的文件,可以避免负载均衡器在服务器生成响应的时候断掉连接。...import StreamingHttpResponse class Echo(object): """An object that implements just the write method...idx in range(65536)) pseudo_buffer = Echo() writer = csv.writer(pseudo_buffer) response = StreamingHttpResponse
大致翻译下就是:SSE是一种能让浏览器通过HTTP连接自动收到服务器端更新的技术,SSE EventSource 接口被W3C制定为HTML5的一部分。...StreamingHttpResponse from django.utils.timezone import now def eventsource(request): response...= StreamingHttpResponse(stream_generator(), content_type="text/event-stream") response['Cache-Control...n' % str(now()) # 发送数据 yield u'data: %s\n\n' % str(now()) time.sleep(2) 里面的StreamingHttpResponse...这个技术相对于Websocket简单很多,但是SSE只是从服务器端往客户端单向传输数据,因此和websocket场景的应用场景还有些差别。
django.shortcuts import render, redirect from django.http import HttpRequest, StreamingHttpResponse,...添加模板 模板中包括一个 EventSource 脚本,用于接收来自 Django 的服务器发送的事件。 在sim下创建templates文件夹,在templates下创建chat.html。...Django文档StreamingHttpResponse:https://docs.djangoproject.com/zh-hans/4.2/ref/request-response/#streaminghttpresponse-objects...StreamingHttpResponse 用于从 Django 向浏览器流式传输响应。...3. https://deepinout.com/django/django-questions/222_django_django_31_streaminghttpresponse_with_an_async_generator.html
由于Django在内部使用Unicode,这意味着从一些来源比如HttpRequest读出来的字符串可能导致潜在的问题。有一些选项用于处理它: 手动将所有Unicode对象编码为兼容的编码。...流式传输大尺寸CSV文件 当处理生成大尺寸响应的视图时,你可能想要使用Django的StreamingHttpResponse类。...例如,通过流式传输需要长时间来生成的文件,可以避免负载均衡器在服务器生成响应的时候断掉连接。...import StreamingHttpResponse class Echo(object): """An object that implements just the write method...idx in range(65536)) pseudo_buffer = Echo() writer = csv.writer(pseudo_buffer) response = StreamingHttpResponse
import os from django.http import HttpResponse def file_download(request, file_path): # do something...import os from django.http import HttpResponse, Http404 def media_file_download(request, file_path)...对于下载大文件,Django更推荐StreamingHttpResponse和FileResponse方法,这两个方法将下载文件分批(Chunks)写入用户本地磁盘,先不将它们载入服务器内存。...方法二: 使用SteamingHttpResonse import os from django.http import HttpResponse, Http404, StreamingHttpResponse...def stream_http_download(request, file_path): try: response = StreamingHttpResponse(open(file_path
alt="">--> {% endfor %} 下载 在实际的项目中很多时候需要用到下载功能,如导excel、pdf或者文件下载,当然你可以使用web服务自己搭建可以用于下载的资源服务器...,如nginx,这里我们主要介绍django中的文件下载。...而StreamingHttpResponse是将文件内容进行流式传输,数据量大可以用这个方法 方式2: from django.http import StreamingHttpResponse # def...download(request): file=open('crm/models.py','rb') response =StreamingHttpResponse(file) response...:https://docs.djangoproject.com/en/1.11/ref/request-response/ 推荐使用FileResponse,从源码中可以看出FileResponse是StreamingHttpResponse
最近在django中要用到文件下载的功能,通过查找,发现以下几种方式,就收集在一起,供日后方便查找。 第一种方式:创建一个临时文件。可以节省了大量的内存。...如果文件非常大时,最简单的办法就是使用静态文件服务器,比如Apache或者Nginx服务器来处理下载。...不过有时候,我们需要对用户的权限做一下限定,或者不想向用户暴露文件的真实地址,或者这个大内容是临时生成的(比如临时将多个文件合并而成的),这时就不能使用静态文件服务器了。...我们在django view中,需要用StreamingHttpResponse这两个类。...完整的代码如下: from django.http import StreamingHttpResponse def big_file_download(request): # do something
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
二、django项目 本环境使用django 3.1.5,新建项目download_demo ?...from django.http import StreamingHttpResponse from django.http import JsonResponse from rest_framework.views...Excel下载失败'}) def file_iterator(self,file_path, chunk_size=512): """ 文件生成器,防止文件过大,导致内存溢出... def big_file_download(self,download_file_path, filename): try: response = StreamingHttpResponse... url: url, // 请求地址 data: options, // 参数 responseType: 'blob' // 表明返回服务器返回的数据类型
'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。
Django 实现文件上传下载API by:授客 QQ:1033553122 欢迎加入全国软件测试交流QQ群:7156436 开发环境 Win 10 Python 3.5.4 Django-2.0.13.../usr/bin/env python # -*- coding:utf-8 -*- __author__ = '授客' from django.contrib import admin from django.urls...import FileResponse from django.utils import timezone from django.conf import settings import os import...file_response["Access-Control-Expose-Headers"] = 'Content-Disposition' # 设置可以作为响应的一部分暴露给外部的请求头,如果缺少这行代码,会导致前端请求响应中看不到该请求头...之后(from django.http import StreamingHttpResponse),替换为 file_response = StreamingHttpResponse(file)
INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes',...'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'customer',...自定义导出 方式 action 这种方式也推荐 import xlwt #导出Excel from django.http import StreamingHttpResponse class AdminReport...'day_time' # 按照日期显示 list_filter = ('offer',) # 过滤条件 list_per_page = 500 # 每页显示500条,太多了可能会出现服务器崩掉的情况...while True: c = f.read(chuck_size) if c: yield c else: break response = StreamingHttpResponse
思路: 文件,让用户下载 - a标签+静态文件 - 设置响应头(django如何实现文件下载) 2. a标签实现 下载模板...设置响应头 方法一:使用HttpResponse from django.shortcuts import HttpResponse def file_down(request): file...from django.http import StreamingHttpResponse def file_down(request): file=open('/home/amarsoft...为了更好的实现文件下载,FileResponse对StreamingHttpResponse做了进一步的封装,即StreamingHttpResponse是FileResponse的父类。...而HttpResponse,StreamingHttpResponse,FileResponse三者都继承了基类HttpResponseBase。
而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
但现在条件苛刻,服务器没有 nginx,也没有 root 权限,意味着你无法编译安装 nginx,且只有一个端口 80 开放访问。怎么让这个 80 端口的某一请求转发到其他端口的 http 服务上?...本文分享如何仅用 Django 实现反向代理。...5、克隆的请求被发送到上游服务器,也就是 upstream。 6、在收到来自上游的响应后,视图将对其进行处理以确保正确设置所有 headers。...7、从上游服务器接收到的响应被转换为 django.http.HttpResponse。对于二进制文件,使用 StreamingHttpResponse 来减少内存使用。...http 的方式共享给他人下载使用,使用 django-revproxy 这个轮子,可以让这个功能集成在 Django 的某一个路由中,在开发者服务器部署,大家用起来是着实方便。
ModelViewSet 其他和之前的类似 其中要注意的是一个 download接口 import re import os from datetime import datetime from django.conf...import settings from django.http import StreamingHttpResponse from rest_framework.viewsets import ModelViewSet...report_dir, mtch) with open(report_path, 'w') as f: f.write(html) response = StreamingHttpResponse...=UTF-8''{}".format(name) return response 每次下载之后我们都会在本地存放一次,然后我们需要以数据流的方式返回html报告 response = StreamingHttpResponse
网站:http://python.usyiyi.cn/django/index.html 中间件 中间件是一个介入Django的请求和响应的处理过程中的钩子框架。...response是Django视图或者中间件返回的HttpResponse或者StreamingHttpResponse对象。 process_response()在所有响应返回浏览器之前被调用。...这个方法必须返回HttpResponse或者StreamingHttpResponse对象。...它可以改变已有的response,或者创建并返回新的HttpResponse或StreamingHttpResponse对象。...处理流式响应 不像HttpResponse,StreamingHttpResponse并没有content属性。所以,中间件再也不能假设所有响应都带有content属性。
领取专属 10元无门槛券
手把手带您无忧上云