我想设置一个允许某些用户访问某些媒体的Django服务器。我确信这不会那么难,我只是有点傻。
例如,我希望USER1能够访问JPEG1,JPEG2和JPEG3而不能访问JPEG4,而USER2能够访问JPEG3和JPEG4。
[我知道我应该为使用Django提供媒体而烧焦,但这就是我现在正在做的事情,当我开始实际使用汽油时,我会改变它。]
答案 0 :(得分:3)
您可以通过返回请求中的文件来使用django发送文件,如Vazquez-Abrams链接所示。
但是,由于效率的原因,您可能会在apache(或lighttpd中的类似设置)中使用mod_xsendfile。 Django发送它的速度并不快,一种方法可以保持使用dev服务器静态函数的选项http://pypi.python.org/pypi/django-xsendfile/1.0
关于哪些用户应该能够访问哪些jpeg,您可能必须自己实现。一种简单的方法是为具有访问权限的用户创建具有多对多字段的Image模型,并检查当前用户是否在这些用户中。类似的东西:
if image.users_with_access.filter(pk=request.user.id).exists():
return HttpResponse(image.get_file())
当然还有许多其他代码,仅作为示例。为此我实际上在我自己的项目中使用了修改过的mod_xsend。
答案 1 :(得分:0)
您需要frob the response恰当。
答案 2 :(得分:0)
您可以将媒体置于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提供媒体服务。