Python项目csv导出需求
在我我们的项目中经常会遇到客户提出导出数据库数据的需求,遇到有保密要求的客户通常使用csv导出表格,因为只能文本导出。
1 csv的导入
import csv
from django.http import HttpResponse
import datetime
2 csv的基本使用
class View(MesBaseListView):
"""模板下载"""
queryset = models.objects.all()
serializer_class = Serializer
# template_file = '模板.csv'
def list(self, request, *args, **kwargs):
"""获取列表
Args:
request (Request): 请求
args (tuple): 未命名的定位参数
ser_field (string): serializer解析的数据在响应数据中对应的键值,与ext_data必须同时为None或有值
ext_data (dict): 附加数据,与ser_field必须同时为None或有值
kwargs (dict): 未命名的关键字参数
Returns:
Response: 对请求的响应
Raises:
AssertionError: xxxxxx
"""
# 当是从现有模板导出的时候用下面注释的代码
# file_path = '文件路径'
# attachment = open(file_path, 'rb')
# response = FileResponse(attachment)
# response['Content-Type'] = 'application/octet-stream'
# response_file_name = urllib.parse.urlencode({'filename': self.template_file})
# response["Content-Disposition"] = "attachment; filename*=UTF-8''{}".format(response_file_name.split('=')[1])
# response['Set-Cookie'] = "fileDownload=true; path=/"
# return response
# 组装表格内容
res_list = [[1, 2]]
now = datetime.datetime.now()
response = HttpResponse(content_type='text/csv')
file_name = 'DataTime{}{}{}_{}{}{}.csv'.format(now.year, now.month, now.day, now.hour, now.minute, now.second)
response['Set-Cookie'] = "fileDownload=true; path=/"
response["Content-Disposition"] = "attachment; filename*=UTF-8''{}".format(escape_uri_path(file_name))
writer = csv.writer(response)
# 组装表头数据
writer.writerow(['实时功率', '累计能耗'])
writer.writerows(res_list)
return response