5

I have a util method in Python Django project:

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`

I want to add my server domain or ip in the front of it, like:

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

How to get current server ip( or domain )?


EDIT

I am not going to get the remote ip, I just want to get the server ip. I mean, I write the Django as backend server, when it is running, how can I get the server ip? or domain.

qg_java_17137
  • 3,134
  • 7
  • 38
  • 70
  • refrer here : https://groups.google.com/forum/#!topic/django-users/6Fjb5FOFrgg . try this : import socket socket.gethostbyname(request.META['SERVER_NAME']) – Vikas Periyadath Jan 16 '18 at 09:29

3 Answers3

12

You can get the hostname from the request like this (docs):

request.get_host()

and the remote IP of the client like this (docs):

request.META['REMOTE_ADDR']

To get the server IP is a bit tricky, as shown in this SO answer, which gives this solution:

import socket
# one or both the following will work depending on your scenario
socket.gethostbyname(socket.gethostname())
socket.gethostbyname(socket.getfqdn())
Paolo Stefan
  • 9,693
  • 5
  • 47
  • 64
2

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

There is another option:

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

when django start

scriptboy
  • 717
  • 6
  • 23
0

like:http://127.0.0.1:1024

# formate: {scheme}://{host}
host_addr =  request._current_scheme_host
iHTCboy
  • 2,479
  • 17
  • 18