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