生成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。

最新文章

  1. Angular企业级开发(5)-项目框架搭建
  2. Security3: Schema 和 Permission
  3. WPF 自定义TextBox,可控制键盘输入内容
  4. C#并行编程-Task
  5. navicat&#160;for&#160;mysql&#160;10.1.7注册码
  6. 如何给ActiveX控件添加“事件”“属性”“标准事件”“自定义事件”等一些相关操作
  7. SharePoint 2010 的企业级搜索技术文章
  8. Memcached【第一篇】安装
  9. PHP过滤数组中的空值
  10. linux下用数据泵导入导出(impdp、expdp)
  11. linux 程序无缘无故推出 没有core文件 broken pipe Resource temporarily unavailable
  12. 【转】一张图解析FastAdmin中的表格列表的功能
  13. Guests组里的用户和其它组里的用户相比,在系统权限上有什么不同?
  14. 清除 idea 缓存
  15. Codeforces 757B. Bash&#39;s Big Day GCD
  16. Linux Shell 基本语法
  17. Java:多线程,分别用Thread、Runnable、Callable实现线程
  18. NOIP2016愤怒的小鸟 题解报告 【状压DP】
  19. JS跳转页面常用的几种方法
  20. WHERE字句

热门文章

  1. 《Java并发编程的艺术》并发编程的基础(四)
  2. C++编程学习(八)new&amp;delete动态内存分配
  3. 如何将本地项目推送到Github
  4. Erlang/Elixir精选-第5期(20200106)
  5. 二十、SAP中定义内表
  6. 利用QRCoder生成二维码
  7. java如何连接Oracle数据库问题
  8. eclipse 下配置安卓环境
  9. Mysql—存储过程
  10. 使用packstack安装pike版本的openstack