• 108.生成和下载csv文件


    生成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。
    始于才华,忠于颜值;每件事情在成功之前,看起来都是天方夜谭。一无所有,就是无所不能。
  • 相关阅读:
    ThreadLocal用法
    Spring Cloud Alibaba 使用RestTemplate进行服务消费
    Spring Cloud Alibaba 使用Nacos作为配置管理中心
    Spring Cloud Alibaba 使用Nacos作为服务注册中心
    Spring Cloud Alibaba 介绍及工程准备
    Redission 支持GsonCodec
    Maven Archetype快速构建项目
    拜占庭将军问题
    Paxos算法详解
    Paxos、Raft分布式一致性算法应用场景(转载)
  • 原文地址:https://www.cnblogs.com/guyan-2020/p/12293288.html
Copyright © 2020-2023  润新知