一个简单的django应用程序,将基于ip地址的地理位置功能包含到您的项目中。
django-easygeoip的Python项目详细描述
注意:是的,我知道这个应用程序有违反pep8的行为,与drf、yadda、yadda、yadda紧密耦合…它对某些人(首先是我)很有用,对其他人不有用。可以随意打开prs,但这主要是我自己的一个存储库(也是查看如何将包发布到pypi的好方法)。
easygeoip是一个django应用程序,它基于本地 存储的数据库由MaxMind发布。
为什么随和?
因为它是包含django.contrib.gis.geoip的一个很好的包装,不需要所有的设置。 您只需要做pip安装django easygeoip
为什么不使用web api呢?
因为您必须注册并获取api密钥,所以查询的数量可能有限制,您可能希望 即使服务器不可用,也可以使用该服务,您可能希望在登台和 生产服务器(可能意味着注册两个帐户)本地数据库更受欢迎的原因有很多。
我怎么用?
首先安装软件包(最好在虚拟环境中):
pip install django-easygeoip
将其添加到已安装的应用程序中
INSTALLED_APPS = ( ... 'easygeoip', ... )
包括它的url(您可以将前缀api更改为您想要的任何内容)
url(r'^api/', include('easygeoip.urls_api', namespace="easygeoip")),
一旦集成到项目中,您将有两个可用的端点:
- /api/location/<;<;ip_address>;/
- /api/location/
第一个端点将使用url中指定的ip地址。第二个端点将使用 请求对象(是的,它理解x-forwarded-for头)。响应是JSON格式的
示例
示例请求:
GET /api/location/93.184.216.34/
示例响应:
HTTP 200 OK { "city": "Norwell", "continent_code": "NA", "region": "MA", "charset": 0, "area_code": 781, "longitude": -70.82279968261719, "country_code3": "USA", "latitude": 42.15079879760742, "postal_code": "02061", "dma_code": 506, "country_code": "US", "country_name": "United States", "ip_address": "93.184.216.34" }
IP地址无效的响应示例:
HTTP 400 Bad request { "reason": "Invalid IP address", "ip_address": "0.0.0.0" }
无效配置的响应示例:
HTTP 500 Internal server error { "reason": "Could not instantiate a GeoIP object. Did you set the GEOIP_PATH variable and downloaded the files?", "ip_address": "93.184.216.34", "exception_message": "GeoIP path must be a valid file or directory." }
安装说明
除了通常的练习(添加到已安装的应用程序,在你的url模式中包含url等等),还有一个步骤 以便此应用程序正常工作。此应用程序中使用的django.contrib.gis.geoip包需要一些二进制文件。 特别需要GeoIP.dat和GeoLiteCity.dat数据库
此应用程序提供实用程序功能/芹菜任务 更新上述文件。或者,GeoIP更新程序可以作为分发包安装 系统本身。我强烈建议定期运行任务(例如使用芹菜节拍或类似的方法)。 这些文件是“每月的第一个星期二”更新的(来自geoip文档)。
我想手动下载文件
只需导入easygeoip并运行任务。
from easygeoip import tasks tasks.update_geoip_database()
我想定期运行任务
芹菜节拍月度任务示例:
CELERYBEAT_SCHEDULE={ 'update_geoip_database': { 'task': 'easygeoip.tasks.update_geoip_database', 'schedule': timedelta(days=30), }, [...] })
在“结束设置”中,geoip路径应指向此类文件所在的目录,而不考虑使用的系统。这个 此应用程序还将使用目录来存储文件。如果未设置,应用程序将使用默认路径/easygeoip/geoip_data/。
日志记录
您只需将另一个记录器添加到日志记录设置。下面是一个示例:
'easygeoip': { 'handlers': ['myhandler'], 'propagate': True, 'level': 'DEBUG', },
测试
要运行测试套件,只需从项目目录中运行/manage.py test easygeoip。
PYPI
这个包裹在这里可以买到:https://pypi.python.org/pypi/django-easygeoip