Это одно из решений: DjangoSnippets ; Кстати, не уверен, почему код ниже не использует urlparse ; но это можно исправить: -)
(Глядя на другие ответы, кажется, у вас есть много вариантов для выбора. Этот вариант может быть не предпочтительным, поскольку он опирается на бесплатную стороннюю службу.)
from urllib2 import urlopen, Request
import re, socket
from django.conf import settings
domain_re = re.compile('^(http|https):\/\/?([^\/]+)')
domain = domain_re.match(settings.SITE_URL).group(2)
def getUserCountry(ip):
url = "http://api.wipmania.com/" + ip + "?" + domain
socket.setdefaulttimeout(5)
headers = {'Typ':'django','Ver':'1.1.1','Connection':'Close'}
try:
req = Request(url, None, headers)
urlfile = urlopen(req)
land = urlfile.read()
urlfile.close()
return land[:2]
except Exception:
return "XX"
Примечание от WIPmania : «Использование API бесплатно для любых целей, личных или деловых, если вы делаете менее 10 000 запросов в календарный день. Простой, но мощный API, позволяющий запросить базу данных WorldIP с помощью одной ссылки. "