使用 GeoIP2 进行地理定位 — Django 文档
使用 GeoIP2 进行地理定位
GeoIP2 对象是 MaxMind geoip2 Python 库 的包装器。 1
为了执行基于 IP 的地理定位,GeoIP2 对象需要 geoip2 Python 库 和 GeoIP Country
和/或 City
二进制格式 的数据集(CSV 文件将不起作用!)。 抓取 GeoLite2-Country.mmdb.gz
和 GeoLite2-City.mmdb.gz
文件并将它们解压到与 :setting:`GEOIP_PATH` 设置对应的目录中。
此外,建议安装libmaxminddb C 库,以便geoip2
可以利用C 库更快的速度。
示例
下面是它的用法示例:
>>> from django.contrib.gis.geoip2 import GeoIP2
>>> g = GeoIP2()
>>> g.country('google.com')
{'country_code': 'US', 'country_name': 'United States'}
>>> g.city('72.14.207.99')
{'city': 'Mountain View',
'continent_code': 'NA',
'continent_name': 'North America',
'country_code': 'US',
'country_name': 'United States',
'dma_code': 807,
'is_in_european_union': False,
'latitude': 37.419200897216797,
'longitude': -122.05740356445312,
'postal_code': '94043',
'region': 'CA',
'time_zone': 'America/Los_Angeles'}
>>> g.lat_lon('salon.com')
(39.0437, -77.4875)
>>> g.lon_lat('uh.edu')
(-95.4342, 29.834)
>>> g.geos('24.124.1.80').wkt
'POINT (-97 38)'
API 参考
- class GeoIP2(path=None, cache=0, country=None, city=None)
GeoIP
对象不需要任何参数即可使用默认设置。 但是,至少 :setting:`GEOIP_PATH` 设置应该设置为 GeoIP 数据集位置的路径。 以下初始化关键字可用于自定义任何默认值。
关键字参数 | 说明 |
---|---|
path
|
GeoIP 数据所在位置的基本目录或城市或国家/地区数据文件 (.mmdb ) 所在位置的完整路径。 假设城市和国家数据集都位于这个目录中; 覆盖 :setting:`GEOIP_PATH` 设置。
|
cache
|
打开 GeoIP 数据集时的缓存设置。 可能是MODE_AUTO 、MODE_MMAP_EXT 、MODE_MMAP 、GEOIP_INDEX_CACHE MODE_MEMORY 分别为 C API 设置。 默认为 0 (MODE_AUTO )。
|
country
|
GeoIP 国家数据文件的名称。 默认为 GeoLite2-Country.mmdb 。 设置此关键字会覆盖 :setting:`GEOIP_COUNTRY` 设置。
|
city
|
GeoIP 城市数据文件的名称。 默认为 GeoLite2-City.mmdb 。 设置此关键字会覆盖 :setting:`GEOIP_CITY` 设置。
|
方法
实例化
- classmethod GeoIP2.open(path, cache)
此类方法根据给定的数据库路径和给定的缓存设置实例化 GeoIP 对象。
查询
以下所有查询例程都可以采用字符串 IP 地址或完全限定的域名 (FQDN)。 例如,'205.186.163.125'
和 'djangoproject.com'
都是有效的查询参数。
- GeoIP2.city(query)
返回给定查询的城市信息字典。 字典中的某些值可能未定义 (None
)。
- GeoIP2.country(query)
返回带有给定查询的国家/地区代码和国家/地区的字典。
- GeoIP2.country_code(query)
返回查询对应的国家代码。
- GeoIP2.country_name(query)
返回查询对应的国家名称。
坐标检索
- GeoIP2.coords(query)
返回(经度,纬度)的坐标元组。
- GeoIP2.lon_lat(query)
返回(经度,纬度)的坐标元组。
- GeoIP2.lat_lon(query)
返回(纬度,经度)的坐标元组,
- GeoIP2.geos(query)
返回与查询对应的 Point 对象。
设置
GEOIP_COUNTRY
用于 GeoIP 国家数据文件的基本名称。 默认为 'GeoLite2-Country.mmdb'
。
GEOIP_CITY
用于 GeoIP 城市数据文件的基本名称。 默认为 'GeoLite2-City.mmdb'
。