Если вы хотите сохранить эту информацию в базе данных django, то, возможно, будет проще сделать это в представлении django.Это может быть RedirectView, который просто перенаправляет на тот же вид после нажатия кнопки.
Ранее я использовал загруженную базу данных GeoLite2-City.mmdb, которая не всегда актуальна, ноok.
Вы можете получить IP-адрес запроса в django с помощью библиотеки ipware.Затем преобразуйте его в IP-объект Python в IPy.Затем вы можете использовать библиотеку geoip для получения информации из БД.
Импортировать следующие библиотеки:
from ipware.ip import get_ip
from IPy import IP
import geoip2.database
Тогда ваш метод получения IP-адресов будет выглядеть примерно так:
class MyRedirectView(RedirectView)
def get_redirect_url(self, request, *args, **kwargs):
## Write some code to handle the redirect url first ##
ip_address = get_ip(self.request)
"""Ensure that the IP address is a valid IP first"""
try:
IP(ip_address)
except Exception:
logger.exception("GEOIP2 error: ")
"""Then get the IP location"""
geo_path = settings.GEOIP_PATH
reader = geoip2.database.Reader(geo_path + '/GeoLite2-City.mmdb')
try:
response = reader.city(ip_address)
city = response.city.name
country = response.country.name
### Some code here to save to your DB
return super(MyRedirectView, self).get_redirect_url(*args, **kwargs)
Если вам нужна гораздо более точная служба определения местоположения по IP, вы можете использовать вызов API для чего-то вроде http://ip -api.com / .Но тогда вам придется подождать этот ответ, прежде чем подавать следующий вид.