1

我知道通过视图和 url 调度直接从 django 提供文件和图片不是一个好方法,但是如果这些文件和图片是通过服务器 (Apache) 提供的,那么全世界都可以看到它们。如果某些文件和图片对用户是私有的,并且只有连接的用户可以看到这些文件或图片怎么办?在这种情况下,我需要由 django 自己服务吗?

4

2 回答 2

0

要提供私人文档,您应该使用执行安全检查的 Python 视图。

这是一个例子

于 2013-05-06T14:42:16.437 回答
0

如果您将 Apache 与 mod_wsgi 一起使用,则可以使用mod_xsendfile

您实际上是希望通过 Django 运行某些资源的授权,将标头传递回 Apache 说“嘿,伙计,放轻松。这个用户可以访问这个'Apache 将处理返回资源。

粗略的步骤(如,足够粗略,您需要使用我提供的链接作为起点进行更多研究)

Apache 需要知道哪些资源是公开的,哪些不是。在 media 下为这两种类型创建一个子目录(为什么不去疯狂并称它们为 /media/public/ 和 /media/private/)

为公共目录设置一个别名,为受保护的目录设置一个 WSGIScriptAlias,受保护的别名将指向您的主站点处理程序(可能是 django.wsgi)

将设置添加到虚拟主机: XSendFile On XSendFileAllowAbove On

将 urlconf 添加到您的 Django 应用程序,该应用程序处理 /media/protected/{whatever} 并通过您的身份验证 Django 应用程序身份验证逻辑对其进行路由。这方面的一个例子是here

上面的一个有用的片段是here 和另一个很好的例子here

于 2013-05-06T14:56:01.447 回答