Как определить местоположение пользователя на карте через ip-адрес в python folium?

Я использую Django REST Framework. Теперь я могу получить доступ к IP пользователя из request пользователя, используя django-ipware.

from ipware import get_client_ip
def getlocation(request):
    client_ip, is_routable = get_client_ip(request)

Он предоставляет мне IP-адрес request, с которого пользователь получает доступ. Теперь я хочу узнать широту и долготу этого IP, с помощью которых я могу поместить местоположение пользователя на фолиевую карту.

map1 = folium.Map(location=[latitude,longitude], zoom_start=12, control_scale=True,prefer_canvas=True)

folium.CircleMarker(location = [latitude,longitude],radius = 20, popup= 'Here You Are',fill=True,fill_color="#3186cc",).add_to(map1)

folium.Marker([latitude,longitude], popup ='Your Location').add_to(map1)

Как я могу получить широту и долготу?

Frist Я должен установить django-ipware используя

pip install django-ipware

Следующая попытка импорта по

from ipware import get_client_ip
import urllib, json

теперь в метод, который будет выполнять фолиевую карту, добавьте эти коды

    client_ip, is_routable = get_client_ip(request)
    if client_ip is None:
        client_ip="0.0.0.0"
    else:
        if is_routable:
            ip_type="Public"
        else:
            ip_type="Private"

    url = 'https://api.ipfind.com/?ip=' + client_ip
    response = urllib.request.urlopen(url)
    data1 = json.loads(response.read())
    longitude=data1["longitude"]
    latitude=data1["latitude"]

важно: Если вы находитесь на локальном сервере, то ваш ip_адрес будет приватным и не маршрутизируемым, поэтому попробуйте добавить try exception block, где вы можете передать статический ip адрес для проверки, получаете ли вы longitude latitude или нет. Мои примеры кода выглядят следующим образом

    client_ip, is_routable = get_client_ip(request)
    if client_ip is None:
        client_ip="0.0.0.0"
    else:
        if is_routable:
            ip_type="Public"
        else:
            ip_type="Private"
    ip_address = '106.220.90.88'
    try:
        url = 'https://api.ipfind.com/?ip=' + client_ip
        response = urllib.request.urlopen(url)
        data1 = json.loads(response.read())
        longitude=data1["longitude"]
        latitude=data1["latitude"]
    except:
        url = 'https://api.ipfind.com/?ip=' + ip_address
        response = urllib.request.urlopen(url)
        data1 = json.loads(response.read())
        longitude=data1["longitude"]
        latitude=data1["latitude"]

Затем вы можете использовать эту широту и долготу для размещения на фолиевой карте.

(Еще один способ - использовать DATABASE для получения широты и долготы этого ip-адреса)

Вернуться на верх