Django:密码保护照片url';s

Django:密码保护照片url';s,django,django-models,Django,Django Models,从我的Django应用程序中,我希望提供安全的照片。这些照片不是供公众使用的,我只希望登录的用户能够查看它们。我不想依赖模糊的文件id(给一张照片一个长的UUID),并指望它被隐藏在我的媒体文件夹中。如何将照片安全地存储在数据库中的磁盘上,并仅将其流式输出到经过身份验证的会话中?您可以通过创建具有mime类型的图像的HttpResponse来实现这一点,然后将图像文件写入/复制到其中 简单的版本可能如下所示: from django.http import HttpResponse @your

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

您可以通过创建具有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

另外,请参见本例和本例。

使用X-Sendfile头告诉前端服务器实际使用哪个文件作为服务器

@check_permissions
def image(request):
    response = HttpResponse(mimetype='image/png')    
    response['X-Sendfile'] = "/real/path/to/image.png"
    return response
这是一本书。通过查看Satchmo如何为可下载的产品对象提供服务,您还可以看到一个示例


最后一点注意,nginx和lighttpd使用X-Accel-Redirect和X-lighttpd-send-file而不是X-Sendfile。

如果是带有mod_python的Apache服务器,这可能是一篇关于它的有趣文章

这似乎不适用于内置服务器。这是正确的还是我做错了什么?不,我想内置服务器不支持这样的功能,但话说回来,它无论如何都不应该用于生产。如果需要devel服务器,可以将其作为一种设置。正确,X-Sendfile头文件基本上是一种从重型后端服务器发送到轻型前端服务器的内部重定向。但显然需要您的Django应用程序做大量工作。