gpt4 book ai didi

python - 是否可以使用 StreamingHttpResponse 生成 PDF,因为可以使用 CSV 生成大型数据集?

转载 作者:行者123 更新时间:2023-12-03 14:28:32 28 4
gpt4 key购买 nike

我有一个大型数据集,我必须为其生成 CSV 和 PDF。对于 CSV,我使用本指南:https://docs.djangoproject.com/en/3.1/howto/outputting-csv/

import csv

from django.http import StreamingHttpResponse

class Echo:
"""An object that implements just the write method of the file-like
interface.
"""
def write(self, value):
"""Write the value by returning it, instead of storing in a buffer."""
return value

def some_streaming_csv_view(request):
"""A view that streams a large CSV file."""
# Generate a sequence of rows. The range is based on the maximum number of
# rows that can be handled by a single sheet in most spreadsheet
# applications.
rows = (["Row {}".format(idx), str(idx)] for idx in range(65536))
pseudo_buffer = Echo()
writer = csv.writer(pseudo_buffer)
response = StreamingHttpResponse((writer.writerow(row) for row in rows),
content_type="text/csv")
response['Content-Disposition'] = 'attachment; filename="somefilename.csv"'
return response
它工作得很好。但是,我找不到可以为 PDF 做的任何事情。可以吗?我用 render_to_pdf以及我使用 PDF 模板。

最佳答案

将 CSV 视为水果沙拉。你可以在一个大锅里切香蕉,加入一些葡萄柚,一些菠萝,……然后把整个分成单独的部分,放在一起放在 table 上(这是:你生成你的 CSV 文件,然后你把它发送到客户)。但是你也可以直接制作单独的部分:在一个小碗里切一些香蕉片,加入一些葡萄柚,一些菠萝,......把这个小碗放在 table 上,对其他单独的部分重复这个过程(这是:您生成 CSV 文件并在生成时将其部分发送给客户端)。
好吧,如果 CSV 是水果沙拉,那么 PDF 就是蛋糕。您必须混合所有成分并将其放入 toastr 。这意味着在烤完整个蛋糕之前,您不能将一片蛋糕带到餐 table 上。同样,在完全生成 PDF 文件之前,您无法开始将其发送给客户端。
所以,为了回答你的问题,这个( response = StreamingHttpResponse((writer.writerow(row) for row in rows), content_type="text/csv") )不能用于 PDF。
但是,一旦您的文件生成,您就可以使用 FileResponse 将其流式传输到客户端。如其他答案中所述。
如果您的问题是生成 PDF 花费的时间太长(例如,可能会触发超时错误),请考虑以下几点:

  • 尝试优化生成算法的速度
  • 在客户端请求之前在后台生成文件并将其存储在您的存储系统中。您可能想要使用 cronjob 或 celery在不阻塞 HTTP 请求的情况下触发 PDF 的生成。
  • 一旦准备好下载文件,使用 websockets 将文件发送到客户端(参见 django-channels)
  • 关于python - 是否可以使用 StreamingHttpResponse 生成 PDF,因为可以使用 CSV 生成大型数据集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63342033/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com