Определение ip адреса посетителя сайта и его геолокации в Python/Django.
10 января 2017 г.
python djangoУмение определить ip адрес пользователя, заходящего на сайт, может пригодиться например для формирования статистики. Зная ip можно с большой долей вероятности определить физическое местоположение пользователя, а эту информацию уже можно использовать для вывода определенного контента: родного языка интерфейса сайта, актуальной рекламы\цен в данном регионе и много чего еще.
Для решения этой задачи в django будем использовать пакеты django-ipware
(определяем ip) и
geoip2
(определяем геолокацию).
Как обычно, сначала нужно установить эти пакеты (geoip2 скорее всего уже включен в стандартную сборку django):
$ pip install geoip2
Для geoip2 придется скачать бесплатную базу (при чем обязательно в бинарном формате) соответствий городов ip адресам, положить ее например в папку geo/ своего проекта и в settings.py прописать путь к ней - GEOIP_PATH = 'geo/'
Далее в view.py подключаем пакеты:
from django.contrib.gis.geoip2 import GeoIP2
и в нужной вьюхе пишем:
if ip is not None:
g = GeoIP2()
try:
location = g.city(ip)
except:
location = {'Локация': 'нет данных'}
else:
# какая-то логика
Итак, сначала из запроса с помощью get_ip мы получаем адрес клиента и кладем его в переменную ip. Если мы получаем адрес, то создаем объект GeoIP2 и пытаемся получить соответствие ip адреса определенному городу на карте из ранее подключенной базы. При успешном выполнении данной операции мы получим словарь location с ключами: region, country_name (страна), country_code (код страны в формате iso_3166-2), city (город), longitude (долгота), latitude (широта), postal_code (почтовый индекс) и dma_code.
Как использовать полученные данные придумаете сами, я например для конкретного посетителя сайта по его городу получаю текущую погоду и вывожу на главной странице справа под поиском.
К сожалению, точно в какой квартире сидит наш клиент узнать не получится, скорее всего удастся получить данные его провайдера, например если вы живете в Гридино, а ваш интернет провайдер находится во Владимире, то и город скорее всего определиться как Владимир, но и этого вполне достаточно для многих целей.
Просмотров - 985
Комментарий будет размещен на сайте после прохождения модерации.