Skip to main content

Django request/response hook (Middleware and Decorator) to geolocate visitors using their IP address

Project description

Django Ip Geolocation:

Django request/response hooks to geolocate visitors by their ip address

Installing:

python -m pip install django-ip-geolocation

Usage:

Decorator:

Use decorators to decorate views :

from django_ip_geolocation.decorators import with_ip_geolocation

@with_ip_geolocation
def api_view(request):
   location = request.location
   ...

Middleware:

First you need to add the middleware into your settings.py

MIDDLEWARE = [
    ...
    'django_ip_geolocation.middleware.IpGeolocationMiddleware',
    ...
]

Then the location is available to all views in request and response:

def api_view(request):
   location = request.location
   ...
   
def other_view(request):
  location = request.location
  ...

Settings

You can configure settings for your hook in the settings.py as follow:

IP_GEOLOCATION_SETTINGS = {
    'BACKEND': 'django_ip_geolocation.backends.IPGeolocationAPI',
    'BACKEND_API_KEY': '',
    'BACKEND_USERNAME': '',
    'RESPONSE_HEADER': 'X-IP-Geolocation',
    'ENABLE_REQUEST_HOOK': True,
    'ENABLE_RESPONSE_HOOK': True,
}

Those are the default settings, that will be overwritten by those set in settings.py

setting description default value (type)
BACKEND Backend class used to detect the geolocation django_ip_geolocation.backends.IPGeolocationAPI (string class path)
BACKEND_API_KEY Api key or token for the backend Empty (string)
BACKEND_USERNAME username for the backend Empty (string)
RESPONSE_HEADER Custom response header to store the geolocation X-IP-Geolocation (string)
ENABLE_REQUEST_HOOK Enable or disable hook on request True (bool)
ENABLE_RESPONSE_HOOK Enable or disable hook on request True (bool)

Available Backends:

Implementing your own backend:

If you want to add a new backend, you need to inherit from django_ip_geolocation.backends.base. Then you need to implement geolocate() and _parse().

geolocate():

This method will make the external api call. It should also store the api response in self._raw_data. and call self._parse().

_parse():

This method will parse raw data stored in self._raw_data and assign values to the class attribute, such as self._continent, self._county, self._geo.

self._country is a dict, with code and name keys.

self._geo is a dict with latitude and longitude keys.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-ip-geolocation-1.0.0.tar.gz (4.2 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page