Web.py Cookbook 简体中文版 - web.ctx
问题
如何在代码中得到客户端信息?比如:来源页面(referring page)或是客户端浏览器类型
解法
使用web.ctx即可。首先讲一点架构的东西:web.ctx基于threadeddict类,又被叫做ThreadDict。这个类创建了一个类似字典(dictionary-like)的对象,对象中的值都是与线程id相对应的。这样做很妙,因为很多用户同时访问系统时,这个字典对象能做到仅为某一特定的HTTP请求提供数据(因为没有数据共享,所以对象是线程安全的)
web.ctx保存每个HTTP请求的特定信息,比如客户端环境变量。假设,我们想知道正在访问某页面的用户是从哪个网页跳转而来的:
例子
class example: def GET(self): referer = web.ctx.env.get('HTTP_REFERER', 'http://google.com') raise web.seeother(referer)
上述代码用web.ctx.env获取HTTP_REFERER的值。如果HTTP_REFERER不存在,就会将google.com做为默认值。接下来,用户就会被重定向回到之前的来源页面。
web.ctx另一个特性,是它可以被loadhook赋值。例如:当一个请求被处理时,会话(Session)就会被设置并保存在web.ctx中。由于web.ctx是线程安全的,所以我们可以象使用普通的python对象一样,来操作会话(Session)。
‘ctx’中的数据成员
Request
environ
又被写做.env
– 包含标准WSGI环境变量的字典。home
– 应用的http根路径(译注:可以理解为应用的起始网址,协议+站点域名+应用所在路径)例:http://example.org/adminhomedomain
– 应用所在站点(可以理解为协议+域名) http://example.orghomepath
...