66

如何使用 Django 获取主机服务器的名称?

我需要托管服务器的名称而不是客户端名称?

4

9 回答 9

106

我通常把这样的东西放在settings.py

import socket

try:
    HOSTNAME = socket.gethostname()
except:
    HOSTNAME = 'localhost'
于 2010-11-05T04:15:55.417 回答
84

如果您有一个请求(例如,这是在视图中),您可以查看request.get_host()哪个为您提供了完整的 locname(主机和端口),如果有的话,请考虑反向代理标头。如果您没有请求,则应在设置中的某处配置主机名。在很多情况下,仅查看系统主机名可能会产生歧义,虚拟主机是最常见的。

于 2012-01-03T11:09:57.403 回答
8

只需添加到@Tobu 的答案即可。如果你有一个请求对象,并且你想知道协议(即 http / https),你可以使用request.scheme(正如@RyneEverett 的评论所建议的那样)。

或者,您可以这样做(下面的原始答案):

if request.is_secure():
    protocol = 'https'
else:
    protocol = 'http'

因为如果使用 HTTPS 发出请求,is_secure() 会返回。True

于 2014-12-10T20:31:15.990 回答
7

尝试os.environ.get('HOSTNAME')

于 2010-11-04T05:06:05.953 回答
4

基本上,您可以request.get_host()在您的视图/视图集中使用。它返回<ip:port>

于 2019-01-15T08:05:01.053 回答
4

如果你需要得到http(s)://hostname/你可以使用以下:

request.build_absolute_uri('/')

所有有用的方法都在这里列出

于 2020-11-02T13:57:52.503 回答
2

如果你有一个请求对象,你可以使用这个函数:

def get_current_host(self, request: Request) -> str:
    scheme = request.is_secure() and "https" or "http"
    return f'{scheme}://{request.get_host()}/'
于 2020-03-17T19:13:44.997 回答
0
request.get_raw_uri() # example https://192.168.32.181:10555/
于 2021-09-30T08:25:55.863 回答
0

为了获得我的 django 服务器名称,我尝试了这个

host = f"{ request.scheme }://{ request.META.get('REMOTE_ADDR') }"
于 2021-11-01T06:10:29.273 回答