用户权限Django用于服务媒体

时间:2010-07-20 17:59:06

标签: django user-permissions

我想设置一个允许某些用户访问某些媒体的Django服务器。我确信这不会那么难,我只是有点傻。

例如,我希望USER1能够访问JPEG1,JPEG2和JPEG3而不能访问JPEG4,而USER2能够访问JPEG3和JPEG4。

[我知道我应该为使用Django提供媒体而烧焦,但这就是我现在正在做的事情,当我开始实际使用汽油时,我会改变它。]

3 个答案:

答案 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提供媒体服务。