提供django中间件,用于检测请求来自的国家。
django-country2的Python项目详细描述
Django国家2
这是django新版本的django-country的新版本。向请求对象添加当前国家信息的django中间件。当前国家/地区可以手动设置或自动检测 基于http头中的ip地址或区域设置信息。
开始
安装Django国家/地区软件包:
pip install django-country2
在django设置中添加中间件:
# settings.py
MIDDLEWARE = [
...
'django_country2.middleware.CountryMiddleware',
]
如果使用SessionMiddleware
,它需要出现在列表中的CountryMiddleware
之前。
现在您可以将检测到的国家作为request
对象的属性来访问:
request.COUNTRY_CODE # Country code is in ISO 3166-1 alpha-2 format. e.g. "US"
添加端点以手动设置国家:
# urls.py
urlpatterns = patterns('',
...
url(r'/', include((django_country2.urls')),
)
现在您可以使用country
数据向<host>/country/
发送post请求
手动设置国家。
在django模板中访问国家:
# settings.py
TEMPLATE_CONTEXT_PROCESSORS = (
...
'django_country2.context_processors.country',
)
# index.html
<div country-code={{country_code}}>{{country_name}}</div>
如何检测国家?
中间件按给定顺序从以下来源检测国家:
- 头部队所在国。强制输入国家代码的标题名称
- 会话,如果在会话中设置了国家代码。
- Cookie,如果Cookie中设置了国家代码。
- IP地址,如果
settings.USE_GEOIP
是True
(默认值:False
)。 - 如果
settings.USE_LOCALE
是True
(默认值为False
),则接受HTTP语言的HTTP头。
设置
标题强制国家
强制输入国家代码的标题名称
国家代码
默认值:'US'
如果未检测到国家,则使用的国家代码。
国家
默认值:所有国家的元组。此列表是从django-countries库检索的。
此列表是一个由两个元组组成的大号,格式为(国家代码、国家名称)-例如(“jp”、“japan”)。它指定哪些国家可供国家选择。
使用geoip
默认值:False
一个布尔值,指定是否应使用IP地址来检测国家/地区。如果此标志设置为True
,则必须指定GEOIP_DAT_PATH
设置。
地理路径
以.dat格式指向geoip数据库的路径。你可以从MaxMind下载。
使用语言环境
默认值:False
一个布尔值,指定是否应使用接受语言http头中的区域设置信息来检测国家/地区。
国家会话密钥
默认值:'django_country2'
存储当前会话的活动国家/地区的会话密钥。
国家曲奇名
默认值:'country'
存储当前会话的活动国家(地区)的Cookie名称。
乡村饼干年龄
默认值:None
(在浏览器关闭时过期)
乡村曲奇的年代,以秒为单位。
乡村曲奇路径
默认值:/
乡村曲奇上设置的路径。这应该与url匹配 Django安装的路径或该路径的父级。
如果有多个django实例在 相同的主机名。它们可以使用不同的cookie路径和每个实例 只会看到自己的国家饼干。
在生产站点上更新此设置时要小心。如果你 更新此设置以使用比以前使用的更深的路径, 具有旧路径的现有用户cookie将不会被更新。这个 将导致网站用户无法切换国家/地区,只要 这些曲奇一直存在。唯一安全可靠的选择 开关是永久更改国家cookie名称。