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:
django_ip_geolocation.backends.IPGeolocationAPI
: (Default) Using https://ipgeolocationapi.com/django_ip_geolocation.backends.IPStack
: (RequireBACKEND_API_KEY
) Using https://ipstack.com/documentation
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Hashes for django-ip-geolocation-1.0.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 53157aa9bb64370c61ecc03446f1d815b5ad7fa14c7a6a6a7ccda95591eecb10 |
|
MD5 | 4bbf82376b68175789e28484317bac5e |
|
BLAKE2b-256 | 84bcaa1d814a17d066aa049e1fa86aaaacb672788407bc516e58228acaec8aba |