提供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>

如何检测国家?

中间件按给定顺序从以下来源检测国家:

  1. 头部队所在国。强制输入国家代码的标题名称
  2. 会话,如果在会话中设置了国家代码。
  3. Cookie,如果Cookie中设置了国家代码。
  4. IP地址,如果settings.USE_GEOIPTrue(默认值:False)。
  5. 如果settings.USE_LOCALETrue(默认值为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名称。

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

推荐PyPI第三方库


热门话题
返回数组无效的java方法   异步Java CompletableFuture获取其请求   java是否可以像RDBMS那样使用视图?   java如何在屏幕上只运行一个片段?   java无法从Vertex jdbc查询中获取结果   java从jtable获取对象的正确方法   java Spring 3数据设备替代方案   Java BigDecimal:四舍五入到客户首选的数字和增量   JAVA主窗口没有出现,我必须左键单击主窗口。java并单击run查看它   Eclipse RCP中的java进程自定义设备事件   JavaEclipse一次又一次地构建代码(没有任何更改)?   java如何实现对象合并