Использование базы данных django GeoIP и MaxMind

Я пытаюсь настроить geoip в Django, чтобы определить источник соединения (чтобы адаптировать контент для разных стран), но столкнулся с проблемой.

Сначала я выполняю:

from django.contrib.gis import geoip
geo = geoip.GeoIP('path to maxmind db')

Затем geo.country('www.google.com') возвращает США, как и следовало ожидать. Другие популярные сайты тоже работают нормально.

Однако, когда я пробую это на своем собственном IP-адресе клиента, я получаю пустую запись. Например: geo.country('127.6.89.129')

возвращает {'country_name': None, 'country': None}

Что мне здесь не хватает? Охватывает ли база данных maxmind только популярные сайты, поэтому ее нельзя использовать, если я хочу определить источник подключения?

Я также использую настройки локали браузера для определения языка, но, к сожалению, мне нужно геолокацию, чтобы адаптировать некоторый контент независимо от языка.


person ptav    schedule 27.07.2015    source источник


Ответы (2)


Ваш IP может быть переадресован

def foo(request):  
    g = GeoIP()
    country = g.country(get_client_ip(request))
    country_code = country['country_code']


def get_client_ip(request):
    x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
    if x_forwarded_for:
        ip = x_forwarded_for.split(',')[0]
    else:
        ip = request.META.get('REMOTE_ADDR')
    return ip
person grigno    schedule 27.07.2015

IP-адрес, который вы использовали в примере, является локальным IP-адресом, вы не можете использовать его за пределами вашей сети, пробовали ли вы использовать настоящий общедоступный IP-адрес?

person Galia Ladiray Weiss    schedule 27.07.2015