Esta es una solución, desde DjangoSnippets; por cierto, no está seguro de por qué el código de abajo no utiliza urlparse; pero que podría ser fijo :-)
(En cuanto a las otras respuestas, parece que tienes un montón de opciones para elegir. Esta opción no puede ser preferible porque se basa en un servicio de 3 ª parte libre.)
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"
Nota: WIPmania: "El uso de la API es gratuito para cualquier propósito, personal o empresarial, si realiza menos de 10.000 solicitudes por día calendario. Una API simple pero potente que le permite consultar la base de datos WorldIP con un solo enlace. "
¿Cómo se quiere distinguir a los usuarios? Basado en el país? En el continente? ¿Lenguaje hablado? etc? –