HttpResponse对象将会将响应的数据作为一个整体返回,此时如果数据量非常大的话,长时间浏览器没有得到服务器的响应,就会超过默认的超时时间,返回超时。而StreamingHttpResponse会将响应的数据作为一个数据流返回给浏览器,这样浏览器就可以接收到服务器发送过来的数据,不会因为长期没有得到服务器的回应而返回超时。

StreamingHttpResponse:

这个类是专门用来处理流数据的,使得在处理一些大型文件的时候,不会因为服务器处理时间过长而连接超时。这个类并不是继承HttpResponse,而是继承HttpResponseBase,并且跟HttpResponse对比有以下几点区别:

(1)这个类没有一个属性content,相反是streaming_content。
(2)这个类的streaming_content必须是一个可以迭代的对象。
(3)这个类没有write方法,如果给这个类的对象写入数据将会报错。
注意:StreamingHttpResponse会启动一个进程类和客户端保持长连接,所以会很消耗资源,所以如果不是特殊要求,尽量少用这种方法。
1.使用StreamingHttpResponse生成大型csv文件并且下载,在浏览器中进行访问的时候,要注意观察浏览器的左下角的加载,或者说是进行安全连接的时间以及下载的时间,示例代码如下:
from django.http import HttpResponse, StreamingHttpResponse
from django.template import loader # 定义一个类Echo,实现write方法
class Echo:
def write(self, value):
return value def large_csv(request):
# 得到一个StreamingHttpResponse对象,并且设置文件的类型为csv
response = StreamingHttpResponse(content_type='text/csv')
# 不显示文件的内容,只是可以进行下载,并且设置文件的名字
response['Content-Disposition'] = "attachment; filename=large_csv.csv"
# 因为StreamingHttpResponse对象传递的第一个参数必须是可以迭代的对象
# ()中使用for ... in ...进行遍历,我们就可以得到一个生成器一样的对象,生成器并不会把数据一次性的返回
rows = ("row {},{}\n".format(row,row) for row in range(0,10000000))
# 使用format()函数将后面的(row,row)与字符串中的{}进行替换
response.streaming_content = rows
return response
2.使用HttpResponse获取大型的csv文件并进行下载,一定要注意观察浏览器左下角文件在加载是的安全连接时间以及下载的时间,示例代码如下:
from django.http import HttpResponse
import csv def large_view(request):
# 初始化
response = HttpResponse(content_type='text/csv')
# 指定文件不显示文件内容,可以作为附件进行下载,并且指定文件名
response['Content-Disposition'] = "attachment; filename=large_csc.csv" <!--使用python内置的csv模块中的write()方法向response对象写入数据-->
writer = csv.writer(response)
for row in range(0,10000000):
writer.writerow(['row {}'.format(row),'row'.format(row)])
return response

109.大型的csv文件的处理方式的更多相关文章

  1. Django学习笔记之视图高级-CSV文件生成

    生成CSV文件 有时候我们做的网站,需要将一些数据,生成有一个CSV文件给浏览器,并且是作为附件的形式下载下来.以下将讲解如何生成CSV文件. 生成小的CSV文件 这里将用一个生成小的CSV文件为例. ...

  2. Django生成CSV文件

    1.生成CSV文件 有时候我们做的网站,需要将一些数据,生成有一个CSV文件给浏览器,并且是作为附件的形式下载下来.以下将讲解如何生成CSV文件. 2.生成小的CSV文件 这里将用一个生成小的CSV文 ...

  3. Android Sqlite 导入CSV文件 .

    http://blog.csdn.net/johnnycode/article/details/7413111 今天遇到 Oracle 导出的12万条CSV格式数据导入 Android Sqlite ...

  4. PHP导出CSV文件出现乱码的解决方法

    在做项目时碰到使用外语的情况下,我们就会使用UTF-8编码.但是,在用PHP导出CSV文件时,如果写入的数据是使用UTF-8编码的日语.韩语之类的外文,就会出现乱码. 要解决PHP生成CSV文件的乱码 ...

  5. python之读取和写入csv文件

    写入csv文件源码: #输出数据写入CSV文件 import csv data = [ ("Mike", "male", 24), ("Lee&quo ...

  6. Pandas 基础(4) - 读/写 Excel 和 CSV 文件

    这一节将分别介绍读/写 Excel 和 CSV 文件的各种方式: - 读入 CSV 文件 首先是准备一个 csv 文件, 这里我用的是 stock_data.csv, 文件我已上传, 大家可以直接下载 ...

  7. Python 编程快速上手 第十四章 处理 CSV 文件和 JSON 数据

    前言 这一章分为两个部分,处理 CSV 格式的数据和处理 JSON 格式个数据. 处理 CSV 理解 csv csv 的每一行代表了电子表格中的每一行,每个逗号分开两个单元格csv 的内容全部为文本, ...

  8. 【其他】csv文件打开是乱码,怎么办?

    csv文件打开是乱码,怎么办?管用的方法,一个就够 工作中,将python生成的中间结果文件写入CSV,经常这么干是不是?文件保存下来后用excel打开,出现了乱码情况,真心烦.为什么? CSV是用U ...

  9. Excel打开csv文件乱码问题的解决办法

    excel打开csv 出现乱码怎么解决 https://jingyan.baidu.com/article/ac6a9a5e4c681b2b653eacf1.html CSV是逗号分隔值的英文缩写,通 ...

随机推荐

  1. TX2开发板Ubuntu16.04设置静态IP

    TX2开发板Ubuntu16.04设置静态IP  https://www.cnblogs.com/qilai/p/11285445.html 首先打开一个Terminal输入 ifconfig 查看自 ...

  2. MongoDB 初始化数据同步

    MongoDB初始化数据同步: 副本集中的成员启动之后,就会检查自身的状态,确定是否可以从某个成员那里进行同步.如果不行的话,尝试从其他成员那里进行完整的数据复制. 这个过程就是初始化同步(initi ...

  3. Python练习题3

    1.九九乘法表 li = [1,2,3,4,5,6,7,8,9] for i in li: for j in li: if i >= j: print(i,'*',j,'=',i*j,end=& ...

  4. springboot#filter

    _ Filter不能处理用户请求,也不能对客户端生成响应. 主要用于对HttpServletRequest 进行预处理,也可以对HttpServletResponse 进行后处理,是个典型的处理链.完 ...

  5. Jinja2语法小记

    jinja2模板语法小记 Jinja2模板中文文档 三种常见界定符 表达式 {{ ... }} 用于装载字符串.变量.函数调用等 语句 {% ... %} 用于装载控制语句,比如if判断.for循环等 ...

  6. vue作用域插槽实践

    引言 我在练手的时候发现后端返回的数据可以通过两种方式渲染 (自己遇到的 可能你都会 哈哈哈) 后端传过来的数据函数 from django.http import JsonResponse def ...

  7. AD在更新PCB的时候,每次封装都会改变位置?

    转载:https://blog.csdn.net/abc87891842/article/details/52538660 3.如果是很多元件的ID不一致, 手动修改太麻烦了, 可以使用AD的 &qu ...

  8. js interval ,timeout

    var inter; intervatest("2019-08-22 09:12:00"); function intervatest(str) { ShowCountDown(s ...

  9. bzoj 1009GT考试

    做了上一道题,全程懵逼,再做这一道,,,23333继续 貌似那些东西都是差不多的.(参见cf621E) 这个为什么b[][]+=1很困惑,为什么不是从b[-1][??]转移的呢?想了一下,因为每一次都 ...

  10. 深入X64架构(翻译)

    | 本人只是原创翻译,而且翻译也不一定好,纯当锻炼.内容如果英文好的同学,建议直接去看英文原版,比较爽. NBAOL系列2代产品是 windows平台64位的应用程序,在技术测试过程中,遇到一些cra ...