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

时间:2018-01-16 09:15:57

标签: python django

我在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?或域名。

3 个答案:

答案 0 :(得分: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())

答案 1 :(得分:1)

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开始时

答案 2 :(得分:0)

like:http://127.0.0.1:1024

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