57 lines
1.5 KiB
Python
Executable File
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
|
|
|