如何在django中查看页面时让用户下载文件

时间:2012-11-29 08:10:27

标签: python django file

我正在制作视图,以便在我的视图中列出数据,如此

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

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

2 个答案:

答案 0 :(得分:3)

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

pdf_data

答案 1 :(得分:0)

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

您最好的选择是将所有PDF保存到文件夹并使用Apache或Nginx为其提供服务,并将内容类型标头设置为application / octet-stream,以指示响应是要保存的。

- 编辑 -

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

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

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