Skip to main content

Django application to handle IP-based geolocation

Project description

mitol-django-geoip

geoip provides IP geolocation services. At its core, it allows you to pass a client's IP address to it, and it will send you back a good estimation of what country the client belongs to.

Specifically, this wraps lookup around using a local copy of the MaxMind GeoIP2/GeoLite2 data. This choice was made to avoid having to hit an API during checkout operations, where doing so may end up blocking the client for an unknown amount of time.

The geoip app provides lookup for a user's country code only so, while you can use datasets that contain more granular location data in them, you'll still only get back the country ISO code from the API in this app.

Setup

The MaxMind geolocation databases are provided in two forms:

  • The GeoLite2 database is free.
  • The GeoIP2 database is not free - a subscription fee applies.

Which one you need will depend on your use case - however, if your intent is only to use the dataset with this app, the GeoLite2 database is sufficient.

In both cases, you will need the CSV format versions of the databases. You have the option of downloading the ASN, City, or Country versions of the database. For the purposes of this app, the Country version is sufficient; if you plan on using the MaxMind data elsewhere in your project and need more granular location data, you can use the City version instead. The ASN database is not supported and can be skipped unless you have a specific need for it.

The downloaded datasets include the network block information in two CSV files - one each for IPv4 and IPv6 network blocks - and the location data in a variety of languages. The English language en one is required by the app but you can import any others that you require.

After installing the app into your Django project in the normal way, you should have a management command called import_maxmind_data available to you. Run this command to import the data from the CSV file you downloaded. You must import the IPv4 netblock file and the English langauge location file but it is recommended to import the IPv6 netblock file as well, especially if your app will be capable of serving IPv6 clients.

Working Locally

If you're working locally, the API will never return a country code. The MaxMind datasets don't include the private network blocks in them as they don't really map to anything, so there's no match for any of the private network IPs.

If you'd like these IPs to match something, you can add that data by running the create_private_maxmind_data command. This will create a set of fake netblock records for the 3 private network blocks available:

  • 10.0.0.0/24
  • 172.16.0.0/12 (172.16.0.0-172.31.255.255)
  • 192.168.0.0/16

You can specify what ISO code you wish to assign to these as well. Running the command again will allow you to re-assign the ISO code.

Note that there is no IPv6 block specified because there are no private IPv6 network addresses (in the same way that there are IPv4 ones).

Usage

Import ip_to_country_code from api and call it with the IP address you've collected from the client. This will return the ISO 3166 alpha2 country code that the IP belongs to, or None if there isn't one. (See note under Working Locally above for important information about private IPv4 network blocks.)

Updating

MaxMind updates the GeoIP2 and GeoLite2 datasets on a regular schedule. You can update the databases by rerunning the import_maxmind_data using newly downloaded copies of the dataset.

MaxMind does provide a method for downloading the dataset programmatically - in the downloads section in your account, you can click Get Permalink for the data files you want. You can then update the link with your API key and write a task to download and then ingest the files. If you're writing this as a task from within your Django app (i.e. a Celery task), you can directly call the import_maxmind_database to do the heavy lifting once the dataset is downloaded. See the MaxMind developer portal to find the dates when the datasets are refreshed.

The import command is idempotent.

Caveats

Note that IP blocks may be reassigned or otherwise move between places for any reason, so the location that is resolved using a specific IP at one point in time may resolve to a different location in the future. You should design your app to store the resolved country code at the time of query if you need to refer to that data later.

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

mitol_django_geoip-2026.4.2.tar.gz (9.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mitol_django_geoip-2026.4.2-py3-none-any.whl (15.1 kB view details)

Uploaded Python 3

File details

Details for the file mitol_django_geoip-2026.4.2.tar.gz.

File metadata

  • Download URL: mitol_django_geoip-2026.4.2.tar.gz
  • Upload date:
  • Size: 9.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for mitol_django_geoip-2026.4.2.tar.gz
Algorithm Hash digest
SHA256 a0c4001904efab60ffc3cd94bd61c2cab51bee7e2f24d1072a68594c22b33daa
MD5 78f9fe42d605e36e398bc91bca5a825f
BLAKE2b-256 27c3fd314d14c72b7f95e2fca5ac732bebf07616a7c62f4e26a2099b10dfe990

See more details on using hashes here.

File details

Details for the file mitol_django_geoip-2026.4.2-py3-none-any.whl.

File metadata

File hashes

Hashes for mitol_django_geoip-2026.4.2-py3-none-any.whl
Algorithm Hash digest
SHA256 148ee63fbd7df7d1acb7b3b9b844eccf1e7281bac068fe2c9b92507f3f164d0a
MD5 62348d3f1056ebf5d388443e66f2c865
BLAKE2b-256 808771bce790ec3e8495b4ec82c058f9063bd701bdccc02a224c933a70b3b187

See more details on using hashes here.

Supported by

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