Django获取访问者的位置

时间:2019-10-07 16:27:03

标签: django django-models

我正在尝试构建一个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模型/表单中?

1 个答案:

答案 0 :(得分:0)

您可以使用用户的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))