我正在使用Apache提供Django应用程序。
在Django的settings.py中我有DEBUG = False
,因此我必须允许一些主机,例如:ALLOWED_HOSTS = ['.dyndns.org', 'localhost']
。这很好,但是我想通过其内部IP地址在本地网络上访问服务器,例如:192.168.0.x
或127.0.0.1
等。我如何定义{{1}如果我想完全通过192.*
打开访问权限,请{}} 127.*
或ALLOWED_HOSTS
。
答案 0 :(得分:9)
根据@rnevius的建议,并根据how to setup custom middleware in django中@AlvaroAV的指导原则,我设法用这个中间件解决了问题:
from django.http import HttpResponseForbidden
class FilterHostMiddleware(object):
def process_request(self, request):
allowed_hosts = ['127.0.0.1', 'localhost'] # specify complete host names here
host = request.META.get('HTTP_HOST')
if host[len(host)-10:] == 'dyndns.org': # if the host ends with dyndns.org then add to the allowed hosts
allowed_hosts.append(host)
elif host[:7] == '192.168': # if the host starts with 192.168 then add to the allowed hosts
allowed_hosts.append(host)
if host not in allowed_hosts:
raise HttpResponseForbidden
return None
并在ALLOWED_HOSTS = ['*']
中设置settings.py
不再以不受控制的方式为所有主机打开。
谢谢你们! :)
答案 1 :(得分:2)
对于那些想知道Django 2.0.dev应该是什么的人(符合@ Zorgmorduk的回答)
您需要使对象可调用:django middleware docs
__init__.py
。filter_host_middleware.py
filter_host_middleware.py
: from django.http import HttpResponseForbidden
class FilterHostMiddleware(object):
def __init__(self, process_request):
self.process_request = process_request
def __call__(self, request):
response = self.process_request(request)
return response
def process_request(self, request):
使用与@ Zorgmorduk的回答相同的process_request定义
settings.py
中的 MIDDLEWARE ;另外更改ALLOWED_HOSTS=['*']
你们都准备好了!