使用 django GeoIP 和 MaxMind 数据库
Using django GeoIP and MaxMind database
我正在尝试在 Django 中设置 geoip 以识别连接源(为不同国家/地区定制内容),但 运行 遇到了问题。
首先我执行:
from django.contrib.gis import geoip
geo = geoip.GeoIP('path to maxmind db')
然后 geo.country('www.google.com')
returns 美国如您所料。其他热门网站也可以正常工作。
然而,当我在自己的客户端 IP 上尝试时,我得到一条空记录。
例如:geo.country('127.6.89.129')
returns {'country_name': None, 'country': None}
我在这里错过了什么? maxmind数据库是不是只覆盖了热门网站,所以如果我想识别连接的来源就不能使用了?
我也在使用浏览器区域设置来识别语言,但不幸的是我需要地理位置来定制一些独立于语言的内容。
您在示例中使用的 IP 地址是本地 IP 地址,您不能在您的网络之外使用它,您是否尝试使用真实的 public IP 地址?
您的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
我正在尝试在 Django 中设置 geoip 以识别连接源(为不同国家/地区定制内容),但 运行 遇到了问题。
首先我执行:
from django.contrib.gis import geoip
geo = geoip.GeoIP('path to maxmind db')
然后 geo.country('www.google.com')
returns 美国如您所料。其他热门网站也可以正常工作。
然而,当我在自己的客户端 IP 上尝试时,我得到一条空记录。
例如:geo.country('127.6.89.129')
returns {'country_name': None, 'country': None}
我在这里错过了什么? maxmind数据库是不是只覆盖了热门网站,所以如果我想识别连接的来源就不能使用了?
我也在使用浏览器区域设置来识别语言,但不幸的是我需要地理位置来定制一些独立于语言的内容。
您在示例中使用的 IP 地址是本地 IP 地址,您不能在您的网络之外使用它,您是否尝试使用真实的 public IP 地址?
您的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