Giter Site home page Giter Site logo

churongcon / django-ip-geolocation Goto Github PK

View Code? Open in Web Editor NEW

This project forked from rednaks/django-ip-geolocation

0.0 0.0 0.0 86 KB

IP Geolocation Hooks for django

Home Page: https://pypi.org/project/django-ip-geolocation/

License: MIT License

Python 98.13% Makefile 1.87%

django-ip-geolocation's Introduction

PyPI version Downloads Build Status

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.geolocation
   ...

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.geolocation
   ...
   
def other_view(request):
  location = request.geolocation
  ...

Cookie

Geolocation data stored in the Response cookie lacks the raw_data and is base64 encoded.

User consent

Developers must implement a helper function to check if the user consented or not and configure it in the settings.py.

By default if the developer didn't provide a validation function, we consider it as implicit consent.

Here is an example of the helper function:

def check_user_consent(request):
  if request.user.is_consented: # this is only an example.
    return True
  return False

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_EXTRA_PARAMS': {},
    'BACKEND_USERNAME': '',
    'RESPONSE_HEADER': 'X-IP-Geolocation',
    'ENABLE_REQUEST_HOOK': True,
    'ENABLE_RESPONSE_HOOK': True,
    'ENABLE_COOKIE': False,
    'FORCE_IP_ADDR': None,
    'USER_CONSENT_VALIDATOR': None
}

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_EXTRA_PARAMS Extra parameters specific to the backend {} (dict)
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)
ENABLE_COOKIE Enable or disable geolocation data in cookie False (bool)
FORCE_IP_ADDR Force ip address, rather than using visitor ip None (string)
USER_CONSENT_VALIDATOR A function path to check if the current user gave his consent None (string, function path)

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()

Makes API calls and stores the API response in self._raw_data.

_parse()

Parse raw data stored in self._raw_data and assigns 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.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.