我正在尝试限制那些直接在浏览器中访问绝对静态图片网址(www.xyz.com/static/img/sam.png)并访问它的用户。
我尝试使用以下django文档:
https://docs.djangoproject.com/en/1.10/howto/deployment/wsgi/apache-auth/
但这也会阻止登录页面中的那些图像(在有效用户通过身份验证之前)。
是否有其他有效方法可以限制未登录的用户?
修改 我曾提到这个Django: Serving Media Behind Custom URL,但它与nginx而不是apache有关。 并且b / w静态和媒体内容也存在差异。我的问题只与静态内容有关
答案 0 :(得分:4)
您可以通过将static
url请求路由到您自己的视图(它尝试使用几乎所有网络服务器中都可用的sendfile扩展名)或使用django here来尝试我的回答whitenoise, whitenoise使用与服务器无关的sendfile api(无论你使用的是nginx还是apache)和生产就绪,扩展whitenoise middleware
并在那里添加你的检查文件限制,sample
代码将是
from django.http import HttpResponseForbidden
from whitenoise.middleware import WhiteNoiseMiddleware
# this is a sample code, you can change for your use case
class ProtectedStaticFileMiddleware(WhiteNoiseMiddleware):
def process_request(self, request):
# check user authentication
if condition_met(request):
return super(WhiteNoiseMiddleware, self).process_request(request)
# condition false
return HttpResponseForbidden("you are not authorized")
注意:使用python文件块api直接提供文件(大文件)在生产时不是一个好主意(想法如file.read()或FileResponse)