【发布时间】:2021-02-20 10:06:10
【问题描述】:
我正在尝试获取用户设备位置。但是 geoip2 返回一个远离用户位置的位置(大约 20 公里到 25 公里)。当我通过移动网络连接我的设备时,当我将我的设备与 wifi 连接时,它会显示不同的位置
首先我得到用户的ip
def get_ip(request):
xff = request.META.get('HTTP_X_FORWARDED_FOR')
if xff:
ip = xff.split(',')[0]
else:
ip = request.META.get('REMOTE_ADDR', None)
return ip
但这会获取用户的私有 ip,而私有 ip 不在国家或城市数据集中,因此 geoip2 会引发错误。
所以我尝试通过网站获取公共IP地址
def get_ip(request):
from requests import get
ip = get('https://api.ipify.org').text
if ip:
return ip
现在我使用 geoip2 来获取用户位置数据
def home(request,):
....
....
....
....
from django.contrib.gis.geoip2 import GeoIP2
g = GeoIP2()
ip = get_ip(request)
print(ip)
country = g.country(ip)
city = g.city(ip)
print(country, city)
lat, long = g.lat_lon(ip)
print(lat, long)
...
...
...
您能否建议一种更好的方法或正确的方法来获取用户的准确位置?
【问题讨论】:
-
GeoIP 永远不会准确,即使它是实时的。它具有您的设备“连接到互联网”的 IP 地址的位置。许多提供商在您访问网络之前首先将您路由到他们的内部网络。例如,我总是在法兰克福演出,而我在柏林以北数百公里。您需要使用Geolocation 浏览器界面才能更准确。
标签: python django geolocation geoip geoip2