Python项目csv导出

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

csv 成功响应事例

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值