我可以为Django媒体文件添加权限吗?

5

我想要开发一个应用,允许用户查看一些视频,但他们必须有权限或已购买该视频。我正在使用Django,并且我希望添加ngnix和gunicorn以提供媒体文件服务。但是我不确定一旦用户获取了视频的URL,如果他的付款过期或没有权限,我如何阻止他查看该视频。目前,我让Django来提供视频服务,并覆盖服务器方法。如果他无权访问视频,我会返回404。


1
你应该让你的视图动态地根据用户的权限提供文件,而不是直接提供静态文件。 - lonewaft
你能给我一个简短的例子吗?我从未使用过gunicorn和nginx,这是我第一次设置生产环境。 - jalanga
@lonewaft 如果我按照你说的那样做,视频将来自nginx并由django服务器提供,我能让视频可寻址吗?因为现在我不能。 - jalanga
1个回答

7

您需要实现所谓的“X-Sendfile功能”。假设您的付费文件将从位置/protected/提供 - 您需要添加到nginx的配置中:

location /protected/ {
    internal;
    root   /some/path;
}

当您想向用户提供名为mycoolflix.mp4的文件时,您的应用程序需要添加头X-Accel-Redirect: /protected/mycoolflix.mp4,并将文件/some/path/protected/mycoolflix.mp4提供给用户。有关更多信息,请参见nginx文档这里这里。 从视图中提供文件不是一个好主意 - 它会使您的Django进程忙于下载,直到下载完成,阻止它服务其他请求。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接