Skip to main content
 首页 » 编程设计

python之从 Django 请求中获取域名

2024年10月01日45thcjp

我有一个域为 www.example1.com 的网站,最近我将另一个域 dns www.example2.com 指向包含 www.example1 的同一服务器.com,所以 www.example1.com 和 www.example2.com 提供相同的代码,但域名应该不同,我想从 django 获取域名请求如下

def homepage(request): 
    domain = request.META['HTTP_HOST'] 
    if domain == 'www.example1.com': 
       return HTTPResponseReredirect('/new/') 
    elif domain == 'www.example2.com': 
       return HTTPResponseReredirect('/old/') 

所以基于域名我想将用户重定向到不同的网页,但每次我使用 request.META['HTTP_HOST'] 输出都是一个 IP 地址 127.0.0.1:8001如下

META:{'HTTP_ACCEPT': ‘text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8’, 
 
'HTTP_ACCEPT_ENCODING': 'gzip, deflate, sdch, br', 
'HTTP_ACCEPT_LANGUAGE': 'en-US,en;q=0.8', 
'HTTP_CONNECTION': 'close', 
'HTTP_COOKIE': 'sessionid=xxxxxxxxxxxxxxxx; ', 
'HTTP_HOST': '127.0.0.1:8001', 
'HTTP_UPGRADE_INSECURE_REQUESTS': '1', 
'HTTP_USER_AGENT': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36', 
'PATH_INFO': u'/', 
'QUERY_STRING': '', 
'RAW_URI': '/', 
'REMOTE_ADDR': '127.0.0.1', 
'REMOTE_PORT': '41280', 
'REQUEST_METHOD': 'GET', 
'SCRIPT_NAME': u'', 
'SERVER_NAME': '127.0.0.1', 
'SERVER_PORT': '8001', 
'SERVER_PROTOCOL': 'HTTP/1.0', 
'SERVER_SOFTWARE': 'gunicorn/19.0.0', 

但是如何获取实际的域名呢?

请您参考如下方法:

request.META['HTTP'] 显示服务器上的当前域名,如果域名未绑定(bind)则显示 IP 地址。


例如我在我的项目中有这个功能

def test(request): 
   return HttpResponse("{}".format(request.META['HTTP_HOST'])) 
  1. What show`s me 在本地服务器上测试功能

  2. What show`s me test function on remote server with domain name aut0parts.site

我假设您在本地服务器上测试您的代码,这就是为什么您的输出是 127.0.0.1:8001。如果您将域名设置为您的服务器,我认为一切都会正常:)