108:生成和下载csv文件
Posted zheng-weimin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了108:生成和下载csv文件相关的知识,希望对你有一定的参考价值。
生成CSV文件:
有时候我们做的网站,需要将一些数据,生成有一个CSV
文件给浏览器,并且是作为附件的形式下载下来。以下将讲解如何生成CSV
文件。
生成小的CSV文件:
这里将用一个生成小的CSV
文件为例,来把生成CSV
文件的技术要点讲到位。我们用Python
内置的csv
模块来处理csv
文件,并且使用HttpResponse
来将csv
文件返回回去。示例代码如下:
from django.http import HttpResponse, JsonResponse import json, csv def small_csv(request): response = HttpResponse(content_type=‘text/csv‘) response[‘Content-Disposition‘] = "attachment;filename=‘userinfo.csv‘" my_write = csv.writer(response) my_write.writerow([‘username‘,‘age‘]) my_write.writerow([‘tom‘,‘21‘]) my_write.writerow([‘jack‘,‘22‘]) return response
这里再来对每个部分的代码进行解释:
- 我们在初始化HttpResponse的时候,指定了Content-Type为text/csv,这将告诉浏览器,这是一个csv格式的文件而不是一个html格式的文件,如果用默认值,默认值就是html,那么浏览器将把csv格式的文件按照html格式输出,这肯定不是我们想要的。
- 第二个我们还在response中添加一个Content-Disposition头,这个东西是用来告诉浏览器该如何处理这个文件,我们给这个头的值设置为attachment;,那么浏览器将不会对这个文件进行显示,而是作为附件的形式下载,第二个filename="somefilename.csv"是用来指定这个csv文件的名字。
- 我们使用csv模块的writer方法,将相应的数据写入到response中。
将csv
文件定义成模板:
我们还可以将csv
格式的文件定义成模板,然后使用Django
内置的模板系统,并给这个模板传入一个Context
对象,这样模板系统就会根据传入的Context
对象,生成具体的csv
文件。示例代码如下:
模板文件:
# 文件路径是:工程template目录下: {% for row in rows %}{{ row.0 }},{{ row.1 }} {% endfor %}
视图函数:
def template_csv(request): resp = HttpResponse(content_type=‘text/csv‘) resp[‘Content-Disposition‘] = "attachment;filename=‘templateinfo.csv‘" context = { ‘rows‘: [ [‘username‘, ‘age‘], [‘bob‘,19], [‘marry‘, 20], ] } template =loader.get_template(‘template.txt‘) csv_template = template.render(context) resp.content = csv_template return resp
以上是关于108:生成和下载csv文件的主要内容,如果未能解决你的问题,请参考以下文章