我有一个分页的表,它使用一个端点的数据,该端点使用Django ReST Framework(DRF)返回JSON。表过滤是通过向DRF传递URL参数来实现的。我正在构建一个按钮,让用户下载过滤后的数据作为CSV。该按钮可以处理大约10K行,但当结果数超过20K时,将失败
下载的内容是Failed - Network error,但是我可以在Chrome dev tools的network标签页上看到,我对csv数据的请求成功了,得到了200个响应代码。以下是返回CSV响应的函数:def download_csv(data):
pseudo_buffer = Echo()
writer = csv.DictWriter(pseudo_buffer, fieldnames=fieldnames)
rows_to_write = [
{'col1': 'a', 'col2': 'b', 'col3': 'c'},
{'col1': 'e', 'col2': 'f', 'col3': 'g'},
# 40K more rows here that are calculated
# from the data parameter which is
# serializer.data (a DRF serializer)
]
# setup streaming http response
response = StreamingHttpResponse(
(writer.writerow(row) for row in rows_to_write),
content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="download.csv"'
return response
我开始尝试使用Django的HttpResponse。这对10K行有效,但在20K+行时失败。我切换到了StreamingHttpResponse,如Django文档中的this example中所述,希望这样可以下载包含大量行的CSV文件。我被困在与使用HttpResponse时相同的限制。在
下面是我用来下载CSV文件的Javascript函数:
^{pr2}$
只是行数越少越好。在