从Django服务媒体文件

时间:2013-05-06 14:05:10

标签: django apache media

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

2 个答案:

答案 0 :(得分:0)

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

这是example

答案 1 :(得分:0)

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

你基本上是想通过Django运行一些资源的授权,把一个标题传回给Apache说'嘿伙计,减轻。这个用户可以访问它'然后Apache将处理返回资源。

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

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

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

向vhost添加设置: XSendFile On XSendFileAllowAbove On

将urlconf添加到处理/ media / protected / {whatever}的Django应用程序中,并通过auth Django app auth逻辑路由它。一个例子是here

以上内容的有用摘录是here 另一个衡量标准的例子here