我们都知道Django的media目录默认是可以直接访问的,但是有些需求需要media目录下的部分目录不能直接访问,这时候就需要进行权限控制。大致的操作方式是,media目录不再交给nginx处理,而是由django自己先处理,进行权限控制后再交给nginx使用内部访问。
这里,我们假设我们的django工程是myshop,需要保护的目录是/myshop/media/dir1和/myshop/dir2。
1.在项目目录下创建一个views.py,即/myshop/myshop/views.py
from django.http import HttpResponse
from django.http import HttpResponseForbidden
PROTECTED_DIR=['dir1', 'dir2']
def media_access(request, path):
access_granted = True
for protect_dir in PROTECTED_DIR:
if protect_dir in path:
#在这里进行访问控制,我们这里的示例,只要是登录用户就允许访问
if request.user.is_authenticated:
pass
else:
access_granted = False
break
if access_granted:
#准许访问,我们重定向一下到/protected/,然后在nginx处理静态文件访问
response = HttpResponse()
del response['Content-Type'