【问题标题】:User permissions Django for serving media用于服务媒体的用户权限 Django
【发布时间】:2011-03-18 14:22:12
【问题描述】:

我想设置一个允许特定用户访问特定媒体的 Django 服务器。我敢肯定这不会那么难做,我只是有点傻。

例如,我希望 USER1 能够访问 JPEG1、JPEG2 和 JPEG3 而不是 JPEG4,并且 USER2 能够访问 JPEG3 和 JPEG 4。

[我知道我应该因为使用 Django 来提供媒体而被烧死,但这就是我目前正在做的事情,当我开始真正使用汽油时我会改变它。]

【问题讨论】:

    标签: django user-permissions


    【解决方案1】:

    您可以使用 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。

    【讨论】:

    • 谢谢。这是我想知道的两个部分,即使我描述得不是很清楚。抱歉,我不能更多地支持答案。
    【解决方案2】:

    您可以将媒体放在http://foo.com/media/blah.jpg 中,并在urls.py 中设置media/(?P<file>.*) 以指向检查用户及其权限的视图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 提供媒体服务。

    【讨论】:

    • 我超级,双重承诺,当它开始变得重要时,不会通过 Django 提供媒体服务。谢谢你,你的例子让它更清楚了。
    【解决方案3】:

    您只需要适当地frob the response

    【讨论】:

      猜你喜欢
      • 2022-10-30
      • 2020-05-02
      • 1970-01-01
      • 1970-01-01
      • 2016-04-04
      • 2014-10-20
      • 2019-03-31
      • 2013-06-28
      • 1970-01-01
      相关资源
      最近更新 更多