Django应用程序,用于处理基于IP的地理位置
项目描述
mitol-django-geoip
geoip
提供IP地理位置服务。在其核心,它允许您将客户端的IP地址传递给它,然后它会返回客户端所属国家的良好估计。
具体来说,它封装了对MaxMind GeoIP2/GeoLite2数据的本地副本的查找。这个选择是为了避免在结账操作期间需要调用API,这样做可能会导致客户端被阻塞未知的时间。
geoip
应用程序仅提供对用户国家代码的查找,因此虽然您可以使用包含更精细位置数据的集合,但您仍然只能从该应用程序中的API获得国家ISO代码。
设置
MaxMind地理位置数据库以两种形式提供
- GeoLite2 数据库是免费的。
- GeoIP2 数据库不是免费的 - 需要订阅费。
您需要哪一个将取决于您的用例 - 然而,如果您只想使用此应用程序中的数据集,则 GeoLite2 数据库就足够了。
在两种情况下,您都需要数据库的CSV格式版本。您可以选择下载ASN、城市或国家版本的数据库。对于此应用程序的目的,国家版本就足够了;如果您计划在其他地方的项目中使用MaxMind数据并需要更精细的位置数据,则可以使用城市版本。ASN数据库不受支持,可以跳过,除非您有特定的需求。
下载的数据集包括IPv4和IPv6网络块的两个CSV文件中的网络块信息,以及各种语言的定位数据。应用程序需要英文语言 en
的版本,但您可以导入您需要的任何其他版本。
按照常规方式将应用程序安装到您的Django项目中后,您应该可以使用名为import_maxmind_data
的管理命令。运行此命令以从下载的CSV文件中导入数据。您必须导入IPv4网段文件和英语语言位置文件,但建议同时导入IPv6网段文件,特别是如果您的应用程序将能够服务IPv6客户端。
本地工作
如果您在本地上工作,API将永远不会返回国家代码。MaxMind数据集不包括私有网络块,因为它们实际上不对应任何东西,所以无法匹配任何私有网络IP。
如果您希望这些IP与某些内容匹配,可以通过运行create_private_maxmind_data
命令来添加这些数据。这将为可用的3个私有网络块创建一组虚假网段记录。
- 10.0.0.0/24
- 172.16.0.0/12 (172.16.0.0-172.31.255.255)
- 192.168.0.0/16
您还可以指定要分配给这些内容的ISO代码。再次运行命令将允许您重新分配ISO代码。
注意,没有指定IPv6块,因为没有私有IPv6网络地址(就像IPv4地址一样)。
用法
从api
导入ip_to_country_code
,并用您从客户端收集的IP地址调用它。这将返回IP所属的ISO 3166 alpha2国家代码,如果没有,则返回None。(有关私有IPv4网络块的更多信息,请参阅上面本地工作部分下的注释。)
更新
MaxMind定期更新GeoIP2和GeoLite2数据集。您可以通过重新运行使用新下载的数据集副本的import_maxmind_data
来更新数据库。
MaxMind确实提供了一个程序下载数据集的方法 - 在您的帐户下载部分中,您可以为所需的数据文件点击获取永久链接。然后,您可以使用API密钥更新链接,并编写一个任务以下载和摄入文件。如果您是从Django应用程序(即Celery任务)中编写此任务,那么一旦数据集下载完毕,您可以直接调用import_maxmind_database
来完成繁重的工作。请参阅MaxMind开发者门户以找到数据集更新的日期。
导入命令是幂等的。
注意事项
请注意,IP块可能因任何原因而重新分配或在各地之间移动,因此使用特定IP在某一时间点解析出的位置可能在将来解析为不同的位置。如果您需要稍后引用这些数据,请设计您的应用程序以在查询时存储解析出的国家代码。
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分发
构建分发
哈希值 for mitol_django_geoip-2023.12.19.1-py3-none-any.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e1c4367848237d184e13aa450ce1f3bbbdfd8ebc226f277be825f48cc80ed144 |
|
MD5 | 94a7496a2d5cf2232cd8168bfea6d227 |
|
BLAKE2b-256 | bffbc72370856b5a5840702b600372dbf958627978b08bf794b73b237bae8a71 |