小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
文章来源于网络,如有侵权请联系站长QQ61910465删除
本文版权归qu快排seo www.sEoguRuBlog.com 所有,如有转发请注明来出,竞价开户托管,seo优化请联系QQ√61910465