Python 阻止直接访问Django中的媒体文件

Python 阻止直接访问Django中的媒体文件,python,django,Python,Django,我在URL中添加了静态路径(Django 2.2和python 3.6.9) static(settings.MEDIA\u URL,document\u root=settings.MEDIA\u root) 但是,我想阻止未经身份验证的访问媒体文件。您可以让django提供媒体文件,但这是无效的 发件人: 从django.conf.url导入模式,包括,url 从django.contrib.auth.decorators导入所需的登录名 从django.views.static导入服务 从

我在URL中添加了静态路径(Django 2.2和python 3.6.9)

static(settings.MEDIA\u URL,document\u root=settings.MEDIA\u root)


但是,我想阻止未经身份验证的访问媒体文件。

您可以让django提供媒体文件,但这是无效的

发件人:

从django.conf.url导入模式,包括,url
从django.contrib.auth.decorators导入所需的登录名
从django.views.static导入服务
从django.conf导入设置
@需要登录
def protected_serve(请求、路径、文档_根=无、显示_索引=假):
返回服务(请求、路径、文档根目录、显示索引)
urlpatterns=模式(“”,
url(r'^%s(?P.*)$'%settings.MEDIA\u url[1:],protected\u serve,{'document\u root':settings.MEDIA\u root}),
)

更好的解决方案是使用NGINX

这回答了你的问题吗?
from django.conf.urls import patterns, include, url
from django.contrib.auth.decorators import login_required
from django.views.static import serve
from django.conf import settings


@login_required
def protected_serve(request, path, document_root=None, show_indexes=False):
    return serve(request, path, document_root, show_indexes)

urlpatterns = patterns('',
    url(r'^%s(?P<path>.*)$' % settings.MEDIA_URL[1:], protected_serve, {'document_root': settings.MEDIA_ROOT}),
)