Django:阻止直接访问文件

标签 django

我想从我的 Web 目录的根目录后面动态地提供文件。目前,我正在静态提供所有文件,我这样做只是为了包含我的 javascript 和 css 文件。我意识到这可能很愚蠢,但我无法以任何其他方式提供文件!

所以,我想动态地提供文件,而用户不能仅通过使用 url 在其他时间访问。

我的设置

ADMIN_MEDIA_PREFIX = '/media/'
MEDIA_ROOT = os.path.join( APP_DIR, 'site_media' )
MEDIA_URL = 'http://localhost:8000/site_media/'

我的网址

( r'^site_media/(?P<path>.*)$', 'django.views.static.serve', { 'document_root': settings.MEDIA_ROOT } )

谢谢!

最佳答案

“动态”是什么意思?你想要实现什么目标?您想控制对文件的访问吗?

如果你想运行一些 Django View 来决定是否允许用户访问文件,你可以使用 sendfile。有关如何设置正确 header 的代码,请参阅以下代码片段:http://djangosnippets.org/snippets/2226/

你的网络服务器也需要支持这个 header ,至少我使用过的 apache 和 nginx 是这样的。

您还需要考虑如何存储和分发文件,因为运行网络服务器的服务器需要访问这些文件。这将取决于您的设置。

关于Django:阻止直接访问文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3901339/

相关文章:

python - Django 用空值注释字段

python - 如何添加默认(隐藏)值以在 Django 中形成模板?

django - 模块未找到错误 : No module named 'project.appname' when running Django tests

python - 从另一个 django 项目中与外部 django 项目交互

django-tastypie 和多对多 "through"关系

python - Django:包含的 urlconf core.urls 中没有任何模式

python - 实现需要多层关系的 django 模型的最佳方法

python - Django 中的异步

python - 重试 <Response [404]> 直到我得到 <Response [200]>

django - 在基于 Django 类的 View 中覆盖 get() 以进行过滤