好的,我知道通过 Django 提供媒体文件是一个 not recommended .但是,我处于一种情况,我想通过 Django 模型使用细粒度访问控制来提供“静态”文件。
示例:我想通过网络为自己提供我的电影库。我经常出差,我希望能够随时随地观看我的任何电影,前提是我可以访问互联网。所以我翻录了我的 DVD,将它们上传到我的服务器并构建了这个简单的 Django 应用程序以及一些 embeddable video player .
为避免任何法律后果,我想确保只有具有适当权限的登录用户(即我自己和住在同一家庭的人,他们可以像我一样在方便时访问真正的 DVD) ,但拒绝其他用户(即在我的博客上发表评论的人)并返回 HTTP 404。
现在,直接使用 Apache 和 mod_wsgi
提供这些文件相当麻烦,因为当对媒体文件的 HTTP 请求(即 http://video.mywebsite.com/my-favorite -movie/
) 进来,我需要根据我的用户数据库验证另一端的人是否具有适当的权限。
问题:能否在不通过 Django View 直接提供媒体文件的情况下实现这种效果?我有哪些选择?
我确实想到的一件事是编写一个简单的脚本,该脚本采用 session ID 和视频的 slug 并返回一些 bool 值,指示用户是否可以(或不能)访问视频文件。然后,以某种方式请求 mod_wsgi
在访问请求的 URL 之前执行此脚本,如果脚本失败则返回 HTTP 404。但是,我不知道这是否可能。
编辑:发布这个问题澄清了我对搜索的一些想法,我遇到了 mod_python
的 file wrapper extension .有没有人对此有足够的经验来验证它是一个可行的解决方案?
最佳答案
是的,您可以从 Apache 连接到 Django 的身份验证。请参阅此操作方法:
关于Django:控制对 "static"文件的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3950675/