摘要:
ctx用于存取web请求的环境变量,基于ThreadedDict类进行实例化。ThreadedDict类可实例化字典类型的对象,该对象某些属性可用于存取处理线程的id。 这样字典化实例的线程池使得web访问的并发控制很好地解决,而且线程之间非常独立。
范例:
1 class example: 2 def GET(self): 3 referer = web.ctx.env.get(‘HTTP_REFERER‘, ‘http://google.com‘) 4 raise web.seeother(referer)
上述代码使用web.ctx.env来获取HTTP_REFERER这一环境变量。如果没有值,则默认会返回‘http://google.com‘,然后重定向到该网站。
web.ctx可以通过loadhook(挂载)的方式来进行设置。例如,每当service收到一个web请求,Session数据都会存放在web.ctx中。因为web.ctx是线程安全的,这时候就可以使用该Session数据(该数据必须是python中可识别的数据类型)。
ctx中包含的数据:
environ 即 env | 一个包含标准WSGI 环境变量格式的字典 |
home | web应用的根目录,同时包含任何外部应用引用时的显示名,例如,http://example.org/admin |
homedomain | ? (显示为协议+主机) http://example.org |
homepath | 用户请求的path,即homepath + path = 用户完整的请求地址,处理时会与urls进行交互 |
host | 主机名,包含端口(默认8080) |
ip | 发起web请求的用户ip |
method | 发起的web请求方法 |
path | 用户请求部分的path,例如,/logon/authenticated,但是对于挂载的子应用,则不会显示子应用的名称。例如,主应用myapp.py,子应用subapp.py。子应用中有页面/read/blogs,则ctx中只会返回example.org/read/blogs而不是example.org/subapp/read/blogs |
protocol | 请求遵循的协议http/https/ftp... |
query | url中请求的条件 |
fullpath 即 path+query | 完整的请求地址,包含请求的页面及请求的条件 |
响应状态:
- status - http状态码,(默认200,ok )异常响应码:401 未授权
- headers - 包含请求头(http header)信息的两个元组
- output - 包含响应实体的字符串
时间: 2024-10-09 17:52:53