You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

32 lines
1.0 KiB

# utils/ip_helper.py
import geoip2.database
from django.conf import settings
import os
def get_client_ip(request):
"""Retrieves the real IP address from the request."""
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
if x_forwarded_for:
# The header contains a list of IPs, the first one is the real client
ip = x_forwarded_for.split(',')[0]
else:
ip = request.META.get('REMOTE_ADDR')
return ip
def get_country_code(ip_address):
"""
Returns the ISO country code (e.g., 'RU', 'US', 'IR') for an IP.
Returns None if IP is invalid or not found.
"""
# Path to your .mmdb file
db_path = os.path.join(settings.BASE_DIR, 'utils', 'country_city_db', 'GeoLite2-Country.mmdb')
try:
with geoip2.database.Reader(db_path) as reader:
response = reader.country(ip_address)
return response.country.iso_code
except Exception as e:
# Log error in production
print(f"GeoIP Error: {e}")
return None