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. WFP之WFP简介

    ·过滤引擎是WFP的核心组成部分,过滤引擎分为两大层:用户态基础过滤引擎和内核态过滤引擎.基础过滤引擎会与内核过滤引擎交互.·内核态过滤引擎是整个过滤引擎的主体,内部分为多个分层,每分层都代表着网络协 ...

  2. STM32初始

    .安装软件.驱动 JLINK驱动.PL2303驱动.MDK4.7(装完破解) .源码编译完要用到的工具 烧录工具MCUISP.串口调试助手 .KEIL建工程模板(2种) (1)寄存器开发:工程文件夹下 ...

  3. MySql索引原理分析

    面试 问:数据库中最常见的慢查询优化方式是什么? 同学A:加索引. 问:为什么加索引能优化慢查询?同学A:...不知道同学B:因为索引其实就是一种优化查询的数据结构,比如Mysql中的索引是用B+树实 ...

  4. mjpg-streamer视频服务器移植

    相关软件下载地址:http://pan.baidu.com/s/16yo8Y JPEG库的移植 对于内核linux-2.6.35,不能再使用servfox,如果要使用的需要修改大量的代码.在此选用新的 ...

  5. 029-PHP取随机数

    <?php //打印从1到100中间的10个随机的数 ; $index < ; $index++) { print(rand(,) . "<BR>\n"); ...

  6. JAVA - SpringBoot项目引用generator生成 Mybatis文件

    JAVA - SpringBoot项目引用generator生成 Mybatis文件  在spring官网https://start.spring.io/自动生成springboot项目,这里选择项目 ...

  7. 实验吧-杂项-你没有见过的加密!(php srand()和rand()函数)

    什么垃圾东西,弄半天,Windows上运行乱码,linux上7.3的php运行也是乱码(气死). 下载文件,查看内容 <?php function encrypt($str) { $crypte ...

  8. Python MySQL Select

    章节 Python MySQL 入门 Python MySQL 创建数据库 Python MySQL 创建表 Python MySQL 插入表 Python MySQL Select Python M ...

  9. POJ - 1321 棋盘问题(简单搜索)

    题意:在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方 ...

  10. DNS bind9安装

    参考   111 首先要成功安装Centos操作系统,最新版本是Centos 6.4版本,最小化安装. [root@localhost named]# ifconfig -a     0 1 eth1 ...