一个简单的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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
无JPA的纯Hibernate ORM java SpringBoot配置   安卓会生成一组唯一的java数字   java我的自定义阵列列表每次启动时都会崩溃我不确定为什么会一直崩溃   Java继承;将子类传递给超类的抽象方法   java从没有if语句的数组中获取instanceof type   java中使用对象的温度转换   存储库接口的JavaSpringDataMongoDBeanXML配置   java JAXWS为iBM websphere、iBM web服务客户端添加寻址   数组试图返回Java中两个对象的面积之和   apache Spark java:columnNameOfCorruptRecord和badRecordsPath在加载csv时不工作   java无法创建。txt文件   java Hibernate与MySQL插入查询不一致   不考虑java Hazelcast分布式地图的最大大小   bash Java如何在父进程中设置环境变量