在 Django 中获取当前服务器 ip 或域

Posted

技术标签:

【中文标题】在 Django 中获取当前服务器 ip 或域【英文标题】:Get current server ip or domain in Django 【发布时间】:2018-06-24 22:50:57 【问题描述】:

我在 Python Django 项目中有一个 util 方法:

def getUserInfo(request):

    user = request.user
    user_dict = model_to_dict(user)
    user_dict.pop("password")
    user_dict.pop("is_superuser")
    user_dict["head_img"] = user.head_img.url # there is `/media/images/users/head_img/blob_NOawLs1`

我想在前面加上我的服务器域或ip,比如:

http://www.example.com:8000/media/images/users/head_img/blob_NOawLs1

如何获取当前服务器 ip(或域)?


编辑

我不打算获取远程 ip,我只想获取服务器 ip。我的意思是,我将 Django 编写为后端服务器,当它运行时,我如何获取服务器 ip?或域。

【问题讨论】:

请点击此处:groups.google.com/forum/#!topic/django-users/6Fjb5FOFrgg。试试这个: import socket socket.gethostbyname(request.META['SERVER_NAME']) 【参考方案1】:

您可以像这样从请求中获取主机名 (docs):

request.get_host()

和这样的客户端的远程IP(docs):

request.META['REMOTE_ADDR']

获取服务器 IP有点棘手,如this SO answer所示, 这给出了这个解决方案:

import socket
# one or both the following will work depending on your scenario
socket.gethostbyname(socket.gethostname())
socket.gethostbyname(socket.getfqdn())

【讨论】:

get_host 给我的是本地 IP,而不是 nginx 配置的虚拟主机。【参考方案2】:

https://docs.djangoproject.com/en/2.0/ref/request-response/#django.http.HttpRequest.META

还有一个选择:

import requests server_ip = requests.get("https://httpbin.org/ip").json()['origin']

django 启动时

【讨论】:

【参考方案3】:

点赞:http://127.0.0.1:1024

# formate: scheme://host
host_addr =  request._current_scheme_host

【讨论】:

也许在两岁时为这个问题的答案添加一些解释?

以上是关于在 Django 中获取当前服务器 ip 或域的主要内容,如果未能解决你的问题,请参考以下文章

将网站或域与 AKS 群集链接

django-获取当前url和ip

在 JS 中获取当前 IP(无第三方服务)[重复]

Django基础之前戏

django3,websocket,asgi,daphne,nginx 结合使用示例

ini 使用Apache保护特定位置仅允许一系列IP(和/或域)[白名单IP]