生成CSV文件

有时候我们做的网站,需要将一些数据,生成一个csv文件返回浏览器,并且是作为附件的形式下载下来。

生成小的csv文件:

生成一个小的csv文件,我们用Python内置的csv模块来处理csv文件,并且使用HttpResponse来将csv文件返回回去。采用python内置的csv模块创建csv文件示例代码如下:
from .models import User
import csv
from django.template import loader, Context def csv_views(request):
# 1. 采用python内置的csv模块创建csv文件
# 初始化HttpResponse对象,默认情况下,请求的头的类型为text/html,但是如果想要生成csv文件的话
# 就要修改请求头的content_type=text/csv
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = "attachment; filename=zjy.csv" # 对response对象做相应的写操作,因为HttpResponse实现了一个写操作。
writer = csv.writer(response)
# print(writer) => <_csv.writer object at 0x000001F6ADAB51A8>
writer.writerow(['username', 'age', 'height'])
writer.writerow(['孤烟逐云', '19', '167'])
return response
以上使用csv模块的writer的方法将数据写入到response中,非常的不方便,可以首先自定义一个模板,之后向模板中添加数据就可以了。

示例代码如下:

from django.template import loader
from django.http import HttpResponse def csv_view(request):
# 初始化HttpResponse对象,默认情况下请求头的类型为text/html,如果不进行修改的话,就会按照html的格式进行解析,这样的话,就不能够得到我们想要的效果了。
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = "attachment; filename=zjy.csv"
context = {
'rows':[
['username', 'age'],
['孤烟逐云', 18],
]
} # 自定义一个模板文件位于:book/templates/book/static/zjy.txt
# zjy.txt文件的内容为:
# {% for row in rows %} {{ row.0 }},{{ row.1 }}
# {% endfor %} <!--加载模板文件-->
template = loader.get_template('book/static/zjy.txt')
<!--向模板文件中添加数据-->
zjy_csv = template.render(context)
response.content = zjy_csv
return response
总结:生成和下载csv文件的整体思路如下:
(1)初始化HttpResponse对象的请求头的content_type为text/csv,并且设置为该文件为附件可以下载同时设置文件名:['Content-Disposition']="attachment; filename=zjy.csv",添加的Content-Disposition头,用来告诉浏览器该如何处理这个文件,我们将值设置为attachment;那么浏览器将不会对这个文件进行显示,而是作为福建的形式下载,第二个参数filename设置csv文件名。
(2)定义向模板中传递的数据context 为字典类型。
(3)从django.template中导入loader 方法,加载我们自定义好的模板文件,并且将我们的context使用render函数传入我们定义好的模板。之后将已经传入数据的模板做为response.content部分。
(4)最后一步就是返回response。

108.生成和下载csv文件的更多相关文章

  1. 使用PHP生成并导出CSV文件

    CSV文件是以纯文本形式存储的,一般以逗号为分隔符.这里主要简单介绍下如何导出CSV文件. 一.浏览器导出CSV文件格式 /** * 导出CSV文件 */ function exportCsv() { ...

  2. 利用php CI force_download($filename, $data) 下载.csv 文件解决文件名乱码,文件内容乱码

    利用php CI force_download($filename, $data) 下载.csv 文件解决文件名乱码,文件内容乱码 2014-07-31 12:53 1047人阅读 评论(0) 收藏  ...

  3. response下载csv文件内容乱码问题

    response下载csv文件内容乱码问题 解决办法:在输出流语句第一行输出 out.write(new byte[]{(byte)0xEF, (byte)0xBB, (byte)0xBF}); Se ...

  4. 使用JavaScript下载csv文件

    前端可以使用JavaScript在客户端下载包含页面数据的文件,这里以下载CSV格式文件为例,代码如下: function downloadData(data, filename, type) { v ...

  5. js实现使用文件流下载csv文件

    1. 理解Blob对象 在Blob对象出现之前,在javascript中一直没有比较好的方式处理二进制文件,自从有了Blob了,我们就可以使用它操作二进制数据了.现在我们开始来理解下Bolb对象及它的 ...

  6. 【转】Java生成plist下载ipa文件

    我们在上传ipa想要安装的时候必须要通过plist文件去下载,并且还要遵循 itms-services协议. 意思就是,第一步我们要生成一个plist文件, 第二步生成一个html文件,用来指向pli ...

  7. 上载和下载CSV文件

    sap中把txt .excel .文件上载到内表中,txt和csv速度最快. excel文件导出的csv是用,分隔符分隔的,如果单元格的文本中就有逗号,这样会和分隔符逗号混淆,最好abap产生csv文 ...

  8. 【Github】如何下载csv文件/win10如何修改txt文件为csv文件

    csv文件:逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号) 右键点击raw按钮,选择目标另存为,下载的是txt文件 win10如何 ...

  9. php 生成和下载xml文件

    方法一 $doc = new DOMDocument('1.0', 'utf-8'); $doc->formatOutput = true; $rootEle = $doc->create ...

随机推荐

  1. 51nod 1352:集合计数

    1352 集合计数 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 给出N个固定集合{1,N},{2,N-1},{3,N-2},...,{N-1,2 ...

  2. bzoj 2451 Uyuw's Concert

    裸的半平面交.感觉这些东西,纯属在考代码能力啊.. #include<cstdio> #include<algorithm> #include<cmath> #de ...

  3. Android Studio 移动虚拟机

    突然间发现C盘 空间占用量增加了很多,经过找寻原因之后发现是因为安装了虚拟机的原因:在Android Studio中安装运行虚拟机时,默认的安装路径一般都在C盘,对于我这种不喜欢C盘存储太满的人来说是 ...

  4. ES6 之 Object 的方法总结

    阅读:Object 1.obj的"." 或 "[]"方法 读取对象的属性或方法 对象属性的读取:ES6中被Proxy的get(target, propKey, ...

  5. C# SqlBulkCopy 避免插入重复数据(不重复即插入)

    之前写过一篇 C# SqlBulkCopy 大量数据导入到数据库 的文章介绍了大量数据导入到数据库的高效方法. 这篇文章与之有些关联,在这之前所想的是做全量插入,每次run这个job就会清空然后插入, ...

  6. AIDL使用绑定启动远程Service出现Service Intent must be explicit: Intent

    Intent intent = new Intent(); intent.setAction("remote.MyRemoteService.Action"); 使用AIDL调用远 ...

  7. vue学习(十)mixin 偷懒

    一 mixin混入偷懒技术 架子 <div id="app"> {{msg}} </div> <script> let app = new Vu ...

  8. tornado反向解析

    tornado反向解析 在路由中添加name属性,并且不能使用元组路由,应当由tornado.web.url定义路由. app = tornado.web.Application([ (r'/', I ...

  9. Scrapy的学习和使用

    1.安装 在windows下安装是真心复杂,不搞了,直接在linux下研究吧! sudo pip install scrapy 2.安装遇到问题 2.1.bz2 module not availabl ...

  10. Pycharm2020最新激活码|永久激活(附最新激活码和插件)

    最近很多人的Pycharm激活时间又过期了,后台很多人索要激活码,我就再把激活的方法汇和工具再梳理一次给大家. 最主要有两种激活方式(两种方式需要的激活码不同): 一.激活码激活: 一般一年多需要激活 ...