【问题标题】:CSV Stream Response DjangoCSV 流响应 Django
【发布时间】:2016-09-04 17:42:05
【问题描述】:

我正在通过查询数据库生成一个 csv 文件,并希望将该文件返回给用户以供下载。文件已损坏,好像下载在完成之前被中断。使用的代码如下:

class Echo(object):
    def write(self, value):
        return value
pseudo_buffer = Echo()
csv_data = []
for d in pesquisa:
    csv_data.append([d[h] for h in data])
writer = csv.writer(pseudo_buffer)
response = StreamingHttpResponse((writer.writerow(row) for row in csv_data),
content_type="text/csv")
response['Content-Disposition'] = 'attachment; filename="report.csv"'
return response

我正在使用 Django 1.8.9 + Gunicorn + Nginx

如果我使用 django 测试服务器得到以下错误:

ConnectionResetError: [Errno 104] Connection reset by peer

【问题讨论】:

  • 为什么不发布完整代码?例如,pesquisa 或数据来自哪里?
  • 我会更新代码,但问题不在于数据,数据是字典列表。该文件已生成,但在第 120 行左右,因此文件已损坏。

标签: python django csv nginx gunicorn


【解决方案1】:

不需要StreamingHttpResponse

csv_data = []
for d in pesquisa:
    csv_data.append([d[h] for h in data])

response = HttpResponse(content_type='text/csv')
writer = csv.writer(response)
writer.writerows(csv_data)
response['Content-Disposition'] = 'attachment; filename="report.csv"'

return response

【讨论】:

  • 问题依旧,文件是50000行,但是系统在120行左右生成。@serg
  • 可能是一些 Gunicorn 设置,然后 nginx+uwsgi+django 返回所有包含上述代码的行。
猜你喜欢
  • 1970-01-01
  • 2016-10-26
  • 2016-05-29
  • 2015-04-07
  • 1970-01-01
  • 1970-01-01
  • 2018-01-21
  • 2021-02-26
相关资源
最近更新 更多