Django:密码保护照片网址?

时间:2010-04-30 19:18:38

标签: django django-models

从我的Django应用程序中,我想提供安全的照片。这些照片不供公众使用,我只希望登录的用户能够查看它们。我不想依赖混淆的文件ID(给照片一个长号的UUID)并依赖于隐藏在我的媒体文件夹中的文件。如何将照片安全地存储在我的数据库中的磁盘上,并将其流式传输到经过身份验证的会话?

3 个答案:

答案 0 :(得分:6)

使用X-Sendfile标头告诉前端服务器实际服务器的文件。

@check_permissions
def image(request):
    response = HttpResponse(mimetype='image/png')    
    response['X-Sendfile'] = "/real/path/to/image.png"
    return response

这是related question。您还可以通过查看Satchmo如何为DownloadableProduct对象提供服务来查看real world implementation

最后一点,nginx和lighttpd使用X-Accel-Redirect和X-LIGHTTPD-send-file代替X-Sendfile。

答案 1 :(得分:2)

您可以通过使用图像的mime类型创建HttpResponse,然后将图像文件写入/复制到其中来实现此目的。

简单版本可能如下所示:

from django.http import HttpResponse

@your_favourite_permission_decorator
def image(request):
    response = HttpResponse(mimetype='image/png')

    with open("image.png") as img:
        response.write(img.read())
    return response

另请参阅此example for PDF files和此示例PIL

答案 2 :(得分:0)

如果它是带有mod_python的Apache服务器,这可能是一篇关于Apache using Django's authentication system的有趣文章。