我使用的是Django REST框架。现在,我可以使用django-ipware从用户的request访问用户IP。
from ipware import get_client_ip
def getlocation(request):
client_ip, is_routable = get_client_ip(request)它为我提供了用户访问的request的IP地址。现在我想找出该IP的纬度和经度,通过它们我可以将用户位置放在folium地图上。
map1 = folium.Map(location=[latitude,longitude], zoom_start=12, control_scale=True,prefer_canvas=True)
folium.CircleMarker(location = [latitude,longitude],radius = 20, popup= 'Here You Are',fill=True,fill_color="#3186cc",).add_to(map1)
folium.Marker([latitude,longitude], popup ='Your Location').add_to(map1)那么如何获取纬度和经度呢?
发布于 2021-08-30 00:49:27
首先,我必须使用以下命令安装django-ipware
pip install django-ipware下一步尝试导入方式
from ipware import get_client_ip
import urllib, json现在,在将执行folium映射的方法中,添加以下代码
client_ip, is_routable = get_client_ip(request)
if client_ip is None:
client_ip="0.0.0.0"
else:
if is_routable:
ip_type="Public"
else:
ip_type="Private"
url = 'https://api.ipfind.com/?ip=' + client_ip
response = urllib.request.urlopen(url)
data1 = json.loads(response.read())
longitude=data1["longitude"]
latitude=data1["latitude"]重要提示:如果您在本地服务器上,那么您的ip_address将是私有的,并且它是不可路由的,因此尝试添加try exception block,您可以在其中传递一个静态ip地址来检查您是否获得longitude latitude。我的代码示例如下
client_ip, is_routable = get_client_ip(request)
if client_ip is None:
client_ip="0.0.0.0"
else:
if is_routable:
ip_type="Public"
else:
ip_type="Private"
ip_address = '106.220.90.88'
try:
url = 'https://api.ipfind.com/?ip=' + client_ip
response = urllib.request.urlopen(url)
data1 = json.loads(response.read())
longitude=data1["longitude"]
latitude=data1["latitude"]
except:
url = 'https://api.ipfind.com/?ip=' + ip_address
response = urllib.request.urlopen(url)
data1 = json.loads(response.read())
longitude=data1["longitude"]
latitude=data1["latitude"]然后,您可以使用该纬度和经度放置在folium Map上。
(另一种方法是使用数据库获取该ip地址的纬度和经度。)
https://stackoverflow.com/questions/68910049
复制相似问题