Python 通过Django中的视图提供静态文件
我正在编写一个Django应用程序,让您在满足某些要求后下载一个文件(例如,您必须登录)。否则该文件需要不可访问 通过Apache提供文件将不起作用:我必须在数据库中检查用户的权限。此外,我没有更改Apache配置的权限 因此,我想在Django中读取该文件,然后设置适当的头并将其发送到客户端 我使用Django手册第页上的信息作为标题 我有以下代码:Python 通过Django中的视图提供静态文件,python,django,Python,Django,我正在编写一个Django应用程序,让您在满足某些要求后下载一个文件(例如,您必须登录)。否则该文件需要不可访问 通过Apache提供文件将不起作用:我必须在数据库中检查用户的权限。此外,我没有更改Apache配置的权限 因此,我想在Django中读取该文件,然后设置适当的头并将其发送到客户端 我使用Django手册第页上的信息作为标题 我有以下代码: #<- check persmissons here, continue if allowed -> #read the pdf
#<- check persmissons here, continue if allowed ->
#read the pdf file
location = 'file.pdf'
file = open(location, 'r')
content = file.read()
file.close
#serve the file
response = HttpResponse(content, mimetype='application/pdf')
response['Content-Disposition'] = 'attachment; filename=filename.pdf'
return response
#
#阅读pdf文件
位置='file.pdf'
文件=打开(位置“r”)
content=file.read()
file.close
#归档
response=HttpResponse(内容,mimetype='application/pdf')
响应['Content-Disposition']='附件;filename=filename.pdf'
返回响应
但是,下载的文件似乎已损坏:无法在Adobe Reader中打开。
我想这可能是编码问题,但我想不出来
非常感谢您的帮助:)您必须以二进制模式打开()
文件(请考虑)
就这样,
file = open(location, 'rb')
我不知道它是否适用于您(因为您不允许更改Apache的设置),但出于性能原因,我建议使用它。这个优雅的解决方案利用Lighttpd的优化来提供静态内容,同时将授权决策委托给第三方(在您的案例中是Django)。谢谢,@Ignacio。我不知道Apache world有类似的解决方案。