Django:如何对照片的URL进行密码保护?

11 浏览
0 Comments

Django:如何对照片的URL进行密码保护?

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

0
0 Comments

问题出现的原因是使用了Apache服务器与mod_python,需要在Django的身份验证系统中进行配置。解决方法是参考Django官方文档中关于Apache使用Django身份验证系统的指南。

以下是整理后的

如果使用的是Apache服务器与mod_python,那么关于Apache使用Django的身份验证系统的文章可能会对你很有帮助。你可以参考Django官方文档中关于Apache使用Django身份验证系统的指南进行配置。


    PythonPath "['/path/to/your/django/project'] + sys.path"
    SetEnv DJANGO_SETTINGS_MODULE yourproject.settings
    PythonOption django.root /path/to/your/django/project
    PythonHandler django.core.handlers.modpython
    PythonDebug On
   
       AuthType Basic
       AuthName "Restricted Area"
       AuthUserFile /path/to/.htpasswd
       Require valid-user
       SetHandler python-program
       PythonHandler django.core.handlers.modpython
       PythonPath "['/path/to/your/django/project'] + sys.path"
       SetEnv DJANGO_SETTINGS_MODULE yourproject.settings
       PythonOption django.root /path/to/your/django/project
   

以上代码是在Apache配置文件中对Django的身份验证系统进行配置的示例。具体的路径和设置根据你的项目情况进行修改。在上述例子中,你可以在`/protected/photos/`路径下保护你的照片URL。用户需要进行基本身份验证才能访问该路径下的内容。用户信息存储在`.htpasswd`文件中,你需要将其替换为你的实际路径。

0
0 Comments

问题:Django如何对图片URL进行密码保护?

原因:在Django中,如果想要对图片URL进行密码保护,可以通过创建一个带有图像MIME类型的HttpResponse,然后将图像文件写入/复制到该HttpResponse中实现。可以使用以下简单的方法来实现:

from django.http import HttpResponse
def image(request):
    response = HttpResponse(mimetype='image/png')
    with open("image.png") as img:
        response.write(img.read())
    return response

解决方法:可以参考Django官方文档中关于输出PDF文件和使用PIL库的示例。然而,这种方法需要Django应用程序做很多工作。

0
0 Comments

问题的出现原因:使用Django内置服务器时,无法使用X-Sendfile头部来告诉前端服务器要提供哪个文件。

解决方法:将X-Sendfile头部的功能从重量级后端服务器发送到轻量级前端服务器。

具体代码如下:

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

相关问题:可以查看这个问题。你还可以通过查看Satchmo如何提供DownloadableProduct对象的实际实现来了解更多。

最后需要注意的是,nginx和lighttpd使用X-Accel-Redirect和X-LIGHTTPD-send-file来代替X-Sendfile。

以上就是这个问题的出现原因以及解决方法。虽然内置服务器不支持X-Sendfile头部,但它本身也不适用于生产环境。如果需要使用开发服务器,可以将其作为设置选项。

0