我想设置一个允许某些用户访问某些媒体的 Django 服务器。我敢肯定这不会那么难做,我只是有点傻。
例如,我希望 USER1 能够访问 JPEG1、JPEG2 和 JPEG3 而不是 JPEG4,并且 USER2 能够访问 JPEG3 和 JPEG 4。
[我知道我应该因为使用 Django 来提供媒体而被烧死,但这就是我现在正在做的事情,当我开始真正使用汽油时,我会改变它。]
我想设置一个允许某些用户访问某些媒体的 Django 服务器。我敢肯定这不会那么难做,我只是有点傻。
例如,我希望 USER1 能够访问 JPEG1、JPEG2 和 JPEG3 而不是 JPEG4,并且 USER2 能够访问 JPEG3 和 JPEG 4。
[我知道我应该因为使用 Django 来提供媒体而被烧死,但这就是我现在正在做的事情,当我开始真正使用汽油时,我会改变它。]
您可以使用 django 通过在请求中返回文件来发送文件,如 Vazquez-Abrams 链接所示。
但是,由于效率的原因,您可能最好在 apache 中使用 mod_xsendfile(或 lighttpd 中的类似设置)。Django 发送它的速度没有那么快,在保留使用开发服务器静态函数的选项的同时这样做的一种方法是http://pypi.python.org/pypi/django-xsendfile/1.0
至于什么用户应该能够访问什么 jpeg,您可能必须自己实现这一点。一种简单的方法是为具有访问权限的用户创建一个具有多对多字段的图像模型,以及一个检查当前用户是否在这些用户中的函数。类似的东西:
if image.users_with_access.filter(pk=request.user.id).exists():
return HttpResponse(image.get_file())
当然还有很多其他代码,仅作为示例。为此,我实际上在我自己的项目中使用了修改后的 mod_xsend。
您只需要适当地响应响应即可。
您可以将媒体放入http://foo.com/media/blah.jpg
并设置一个指向以检查用户及其权限的media/(?P<file>.*)
视图:urls.py
blahview
from you_shouldve_made_one_anyways import handler404
def blahview(request,*args,**kwargs):
if cannot_use( request.user, kwargs['username'] ): return handler404(request)
...
虽然为了清楚起见,我不建议通过 Django 提供媒体服务。