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

2024-05-19 08:36:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建视图是为了像这样列出视图中的数据

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

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


Tags: 文件数据用户name视图pdfsavehtml
2条回答

查看django docs,它显示了用'attachment; filename="somefilename.pdf"'填充response['Content-Disposition'],但是我认为如果您已经将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')

我不建议在请求期间生成PDF,也不建议使用Django来提供静态文件。你知道吗

最好的办法是将所有PDF保存到一个文件夹中,然后使用Apache或Nginx来提供它们,并将content-type头设置为application/octet-stream,以指示要保存的响应。你知道吗

编辑

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

Django不是用来提供静态文件的。引用django文档,“仅仅因为它可以,并不意味着它应该”。你知道吗

在请求期间生成PDF不是一个好主意,因为它会让用户等待,请求可能会超时,长时间运行的请求会占用服务器,不耐烦的用户会(反复)刷新,最后,它是DOS攻击的表面。你知道吗

相关问题 更多 >

    热门问题