Django 用于提供媒体服务的用户权限

发布于 2024-09-11 00:30:56 字数 218 浏览 6 评论 0原文

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

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

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

I want to set up a Django server that allows certain users to access certain media. I'm sure this can't be that hard to do and I'm just being a little bit silly.

For example I want USER1 to be able to access JPEG1, JPEG2 and JPEG3 but not JPEG4, and USER2 to be able to access JPEG3 and JPEG 4.

[I know I should be burnt with fire for using Django to serve up media, but that's what I'm doing at the moment, I'll change it over when I start actually running on gas.]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

谢绝鈎搭 2024-09-18 00:30:56

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

You can send a file using django by returning the file in the request as shown in Vazquez-Abrams link.

However, you would probably do best by using mod_xsendfile in apache (or similar settings in lighttpd) due to efficiency. Django is not as fast at sending it, one way to do so while keeping the option of using the dev server's static function would be http://pypi.python.org/pypi/django-xsendfile/1.0

As to what user should be able to access what jpeg, you will probably have to implement this yourself. A simple way would be to create an Image model with a many-to-many field to users with access and a function to check if the current user is among those users. Something along the line of:

if image.users_with_access.filter(pk=request.user.id).exists():
    return HttpResponse(image.get_file())

With lots of other code of course and only as an example. I actually use a modified mod_xsend in my own project for this very purpose.

为人所爱 2024-09-18 00:30:56

您可以将媒体放入 http://foo.com/media/blah.jpg 并在 media/(?P.*) 中设置 media/(?P.*) code>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)
  ...

虽然只是为了清楚起见,但我不建议提供媒体服务通过姜戈。

You can put the media in http://foo.com/media/blah.jpg and set up a media/(?P<file>.*) in urls.py to point to a view blahview that checks the user and their permissions within:

from you_shouldve_made_one_anyways import handler404
def blahview(request,*args,**kwargs):
  if cannot_use( request.user, kwargs['username'] ): return handler404(request)
  ...

Though just to be clear, I do not recommend serving media through Django.

傻比既视感 2024-09-18 00:30:56

您只需要适当地 frob 响应 即可。

You just need to frob the response appropriately.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文