Django 获取访客位置
Posted
技术标签:
【中文标题】Django 获取访客位置【英文标题】:Django get Visitor's Location 【发布时间】:2019-10-07 16:27:03 【问题描述】:我正在尝试构建一个 Django Web 应用程序来存储内部跟踪指标(以及自己的工作)。 到目前为止,我已经创建了模型来获取 API 命中计数器。我想检查用户从哪个位置访问了我的应用程序。为此,我必须将数据存储在 GeoDjango 模型中。
from django.contrib.gis.db import models
class AccessLocation(models.Model):
location = g_models.PointField()
user = models.ForeignKey(User,on_delete=models.PROTECT)
class Meta:
abstract = True
db_table = "location_info"
现在我想在用户访问我的视图并存储在数据库中时捕获用户的位置。 有没有 django/pythonic 方法可以做到这一点? 例如:捕获用户位置(纬度和经度)的隐藏表单字段? 编辑: 我找到了如何获取用户的位置(如果他们允许的话)。问题是如何将它们存储在 django 模型/表单中?
【问题讨论】:
Django, Retrieve IP location的可能重复 【参考方案1】:您可以使用用户的 IP 地址和https://ipstack.com/ 来访问用户的位置信息。
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
def get_geolocation_for_ip(ip):
url = f"http://api.ipstack.com/ip?access_key=access_key_from_ip_stack"
response = requests.get(url)
response.raise_for_status()
return response.json()
geo_info = get_geolocation_for_ip(get_client_ip(request))
【讨论】:
通过 IP 获取地理位置的注意事项总是尽最大努力。***别的 IP 地理定位在 ipstack.com、ipfind.com 等其中一些服务上相当可靠,但随着您深入到城市级别、邮政编码/邮政编码级别,可靠性会降低。 IP 地理定位本质上是一个猜谜游戏。我发现某些服务可能在某些 IP 地址上运行良好,而在其他 IP 地址上运行不佳。所以请始终牢记这一点,没有一种完美的服务可供使用以上是关于Django 获取访客位置的主要内容,如果未能解决你的问题,请参考以下文章