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 获取访客位置的主要内容,如果未能解决你的问题,请参考以下文章

获取访客IP地区位置信息浏览器来源页面

利用PHP获取访客IP地区位置浏览器及来源页面等信息

在不使用 3rd 方库的情况下获取访客位置(IP)[重复]

在 Woocommerce 3 中获取地理位置的国家和地区

django - 如何通过浏览器 IP 获取位置

如果选中复选框,则获取当前位置