0

我正在制作视图以像这样在我的视图中列出数据

class DownloadView(ListView):
    template_name = 'mytemplate.html'

现在在我的那个视图中,我希望当页面加载时我在那个视图中生成一个 pdf 文件(我可以这样做),然后它应该提示用户保存文件选项。我怎样才能做到这一点

4

2 回答 2

3

查看django 文档,它显示填充response['Content-Disposition']with 'attachment; filename="somefilename.pdf"',但我认为以下可能有效,如果您已将 pdf 文件数据读入pdf_data.

from django.http import HttpResponse

def serve_pdf_view(request):
    pdf_data = magically_create_pdf()
    return HttpResponse(pdf_data, content_type='application/pdf')
于 2012-11-29T08:32:10.517 回答
0

我不建议在请求期间生成 PDF 或使用 Django 提供静态文件。

最好的办法是将所有 PDF 保存到一个文件夹并使用 Apache 或 Nginx 来提供它们并将内容类型标头设置为 application/octet-stream 以指示要保存响应。

- 编辑 -

我相信正确的解决方案是动态生成 PDF,但使用任务队列而不是在请求期间执行。如果您需要对请求 PDF 的用户进行身份验证和授权,请在 Django 中进行,但使用 X-Accel (nginx)、X-Sendfile (apache) - 或等效的 - 告诉您的网络服务器提供实际文件。

Django 不打算提供静态文件。引用 django 文档,“仅仅因为它可以,并不意味着它应该”。

在请求期间生成 PDF 不是一个好主意,因为它使用户等待,请求可以并且将会超时,长时间运行的请求会占用您的服务器,不耐烦的用户会(反复)刷新,最后,这是一个 DOS 攻击面。

于 2012-11-29T08:36:21.957 回答