我的应用程序服务于多个域,我理解应该通过我正在研究的命名空间来完成。由于多个域应具有多个分析ID:■我从代码中获取分析ID,但我想使其更具可配置性:
if os.environ.get('HTTP_HOST').endswith('.br') \
or os.environ['SERVER_NAME'].endswith('.br'):
data[u'analytics'] = 'UA-637933-12'
else:
data[u'analytics'] = 'UA-637933-18'
self.response.out.write(template.render(os.path.join(os.path.dirname(__file__),
'templates', name + '.html'), data))
以上将分析ID设置为..- 12,如果它是我的巴西域名和其他ID ...- 18如果它是我的点com。但这仅适用于2个域,并且不易于推广。如何以更科学和可扩展的方式实现此功能,以便在不手动将域添加到应用程序的情况下将应用程序添加到域中变得容易?
我认为命名空间是这里的方式,因为这些域是谷歌应用程序域,但我不明白how to use namespaces:
def namespace_manager_default_namespace_for_request():
"""Determine which namespace is to be used for a request.
The value of _NAMESPACE_PICKER has the following effects:
If _USE_SERVER_NAME, we read server name
foo.guestbook-isv.appspot.com and set the namespace.
If _USE_GOOGLE_APPS_DOMAIN, we allow the namespace manager to infer
the namespace from the request.
If _USE_COOKIE, then the ISV might have a gateway page that sets a
cookie called 'namespace', and we set the namespace to the cookie's value
"""
name = None
if _NAMESPACE_PICKER == _USE_SERVER_NAME:
name = os.environ['SERVER_NAME']
elif _NAMESPACE_PICKER == _USE_GOOGLE_APPS_DOMAIN:
name = namespace_manager.google_apps_namespace()
elif _NAMESPACE_PICKER == _USE_COOKIE:
cookies = os.environ.get('HTTP_COOKIE', None)
if cookies:
name = Cookie.BaseCookie(cookies).get('namespace')
return name
我想我应该使用命名空间管理器,获取命名空间并根据命名空间设置分析ID但是如何?
谢谢
答案 0 :(得分:3)
最简单的方法是使用Python dict:
analytics_ids = {
'mydomain.br': 'UA-637933-12',
'mydomain.com': 'UA-637933-18',
}
data['analytics'] = analytics_ids[self.request.host]
如果您有其他每个域的统计信息,您可能希望将每个字典条目设置为元组,嵌套字典或某种配置对象,然后根据当前请求获取并存储它以便于参考。
如果您希望能够在运行时重新配置它,您可以使用数据存储模型,但这会对需要获取它的请求施加额外延迟;在我看来,每次添加域时重新部署都不太可能是您的问题。
命名空间与您正在做的事情相关。它们是在不同域之间划分其余数据的好方法,但它们对于分割配置数据没有用。
答案 1 :(得分:1)
我假设您有两个运行相同应用程序的实例。 我建议您将Analytics ID转换为配置变量,而不是摆弄命名空间。
即,将其存储在配置文件或您的网站使用的数据库中。然后为每个部署设置一个ID(在运行Web的每个位置)并在运行时获取它。
例如:
配置文件:
analyticsId="UA-637933-12"
代码:
data[u'analytics'] = getValueFromConfig("analyticsId")
其中getValueFromConfig是您定义的函数,用于读取适当的值。 (为了毫不费力地使用配置文件,您可以使用ConfigParser模块。)
现在您已经获得了更大的灵活性 - 您无需在运行时进行任何检查和切换。您只需要为每个网站定义一次值并完成它。