Files
B42/at_django_boilerplate/utils/geolocation.py
2026-01-07 12:09:20 +05:30

57 lines
1.5 KiB
Python
Executable File

from django.contrib.gis.geoip2 import GeoIP2
from ipware import get_client_ip
import socket
def get_ip_and_country(request, default_country='in', default_currency='INR'):
ip, is_routable = get_client_ip(request)
if not ip:
return '127.0.0.1', default_country, default_currency
try:
socket.inet_aton(ip)
if ip.startswith(('127.', '192.168.', '10.', '172.')):
return ip, default_country, default_currency
except socket.error:
return ip, default_country, default_currency
try:
g = GeoIP2()
country = g.country(ip)['country_code'].lower()
currency_map = {
'us': 'USD',
'eu': 'EUR',
'gb': 'GBP',
'in': 'INR',
'au': 'AUD',
'ca': 'CAD',
'jp': 'JPY',
}
currency = currency_map.get(country, default_currency)
return ip, country, currency
except Exception:
return ip, default_country, default_currency
def get_city_and_country_from_ip(ip):
g = GeoIP2()
tmp = {'country':'',
'city':'',
'latitude':'',
'longitude':''}
if ip!='127.0.0.1':
try:
# country = g.country(ip)
city = g.city(ip)
# print(city)
tmp['country'] = city['country_name']
tmp['city'] = city['city']
tmp['latitude'] = city['latitude']
tmp['longitude'] = city['longitude']
except Exception as e:
print(e)
return tmp