Джанго получает местоположение посетителя - PullRequest
0 голосов
/ 07 октября 2019

Я пытаюсь создать веб-приложение Django, которое будет хранить внутренние метрики отслеживания (наряду с выполнением собственной работы). Я до сих пор создал модели для получения счетчиков посещений API. Я хочу проверить, откуда пользователь получил доступ к моему приложению. Для этого мне нужно хранить данные в GeoDjango Model.

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 голосов
/ 07 октября 2019

Вы можете использовать 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))
...