Django笔记:下载csv文件

世上唯一不能复制的是时间,唯一不能重演的是人生,唯一不劳而获的是年龄。该怎么走,过什么样的生活,全凭自己的选择和努力。人生很贵,请别浪费!与智者为伍,与良善者同行。Django笔记:下载csv文件,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

小csv文件
如果是想要给用户返回一个较小的csv文件,那么使用普通的HttpResponse对象就可以了。
示例:在访问对应的url时,浏览器就会自动下载对应的csv文件了。

import csv


def get_csv(request):
    # 创建一个HttpResponse响应对象,并指定content_type为text/csv
    response = HttpResponse(content_type='text/csv')
    # 将content内容作为csv附件形式发送回去,并指定文件名
    response['Content-Disposition'] = "attachment;filename='test.csv'"
    # 这是Python内置的csv库,可以将response对象当成一个文件句柄传入
    writer = csv.writer(response)
    writer.writerow(['username', 'age'])
    writer.writerow(['zhangsan', '20'])
    return response

大csv文件
如果是处理较大的csv文件的话就需要用到StreamingHttpResponse了,这个类是专门用来处理流数据的,使得后台在处理一些大型文件的时候,不会因为服务器处理时间过长而出现连接超时的问题。
因为StreamingHttpResponse并不是继承自HttpResponse,而是直接继承自HttpResponseBase,所以与HttpResponse还是有一些区别需要注意下:

  • 没有content属性,而是streaming_content
  • streaming_content必须是一个可迭代的对象。
  • 没有write方法,也就是说不能将此对象当做文件一样往里面写入数据。
  • 此对象会启动一个进程来和客户端保持长连接,会很耗资源,所以如果不是特殊情况,尽量少用这个对象。
from django.http import StreamingHttpResponse

def large_csv_view(request):
    response = StreamingHttpResponse(content_type='text/csv')
    response['Content-Disposition'] = "attachment;filename='large.csv'"
    rows = ('Row {}, Row {}\n'.format(row, row) for row in range(1000000))
    response.streaming_content = rows
    return response

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/235412.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!