request 简介
request对象是web2py中常见的类型
gluon.storage.storage的实例,gluon.storage.storage是python的dict的子类
。
gluon.storage.storage与dict的区别:
-
可以像访问属性一样访问dict的元素。如:request.vars等价于request['vars']
-
另一个与dict不同的就是当访问的key不存在时,不抛出异常,而是返回None。
-
request 有下列的属性,其中有些属性也为gluon.storage.storage类型:
属性 | 含义 |
---|---|
request.cookies | cookie.simplecookie()对象,包含了HTT request中的cookies信息。它像一个cookies dictionary。 |
request.env | 是一个storage对象,包含了传递给controller的环境变量,包括来自HTTP request的HTTP header和标准的WSGI参数。环境变量都被转化为小写,点被转化为下划线 |
request.application | 请求的应用的名字(从request.env.path_info解析而来 |
request.controller | 请求的controller的名字(从request.env.path_info解析而来) |
request.function | 请求的函数的名字(从request.env.path_info解析而来) |
request.extension | extension默认为html,如果controller函数返回一个dictionary且没有指定view,extension将被用来决定使用何种view来渲染dictionary。(从request.env.path_info解析而来) |
request.folder | 应用程序的目录 |
request.now | 存储了当前request的时间戳,类型为datetime.datetime |
request.args | controller函数后面的URL路径组件的list,等价于request.env.path_info('/')[3:] |
request.vars | storage对象包含了HTTP GET和HTTP POST的查询变量 |
request.get_vars | storage对象存储了HTTP GET查询变量 |
request.post_vars | storage对象存储了HTTP POST查询变量 |
request.client | client的ip地址 |
request.body | 只读的文件流包含了HTTP request的body |
request.ajax | 是True,如果函数通过Ajax request被调用 |
request.cid | ajax request产生的组件的id |
request.wsgi | 一个钩子允许调用在actions里第三方的WSGI应用 |
- 以请求http://127.0.0.1:8000/examples/default/status/x/y/z?p=1&q=2为例:request对象如下:
variable | value |
---|---|
request.application | examples |
request.controller | default |
request.function | index |
request.extension | html |
request.view | status |
request.folder | applications/examples/ |
request.args | ['x', 'y', 'z'] |
request.vars | <Storage {'p': 1, 'q': 2}> |
request.get_vars | <Storage {'p': 1, 'q': 2}> |
request.post_vars | <Storage {}> |
request.cid | None |
request.wsgi | hook |
request.env.content_length | 0 |
request.env.content_type | |
request.env.http_accept | text/xml,text/html; |
request.env.http_accept_encoding | gzip, deflate |
request.env.http_accept_language | en |
request.env.http_cookie | session_id_examples=127.0.0.1.119725 |
request.env.http_host | 127.0.0.1:8000 |
request.env.http_max_forwards | 10 |
request.env.http_referer | http://web2py.com/ |
request.env.http_user_agent | Mozilla/5.0 |
request.env.http_via | 1.1 web2py.com |
request.env.http_x_forwarded_for | 76.224.34.5 |
request.env.http_x_forwarded_host web2py.com | |
request.env.http_x_forwarded_server 127.0.0.1 | |
request.env.path_info | /examples/simple_examples/status |
request.env.query_string | remote_addr:127.0.0.1 |
request.env.request_method | GET |
request.env.script_name | |
request.env.server_name | 127.0.0.1 |
request.env.server_port | 8000 |
request.env.server_protocol | HTTP/1.1 |
request.env.web2py_path | /Users/mdipierro/web2py |
request.env.we2bpy_version | Version 1.83.1 |
request.env.web2py_runtime_gae | (optional, defined only if GAE detected) |
request.env.wsgi_errors | <open file, mode 'w' at > |
request.env.wsgi_input | |
request.env.wsgi_multiprocess | False |
request.env.wsgi_multithread | True |
request.env.wsgi_run_once | False |
request.env.wsgi_url_scheme | http |
request.env.wsgi_version | 10 |
request.env.http_* | 变量是从request HTTP header中解析而来 |
response 是storage实例,它包含了下列的属性
属性 | 含义 |
---|---|
response.body | 包含了返回的page的body的stringio对象。 |
response.cookies | 与request.cookies(包含了client到server的cookies)类似,但是包含了server返回给client的cookies。 |
response.download | 一个方法用来实现controller函数允许文件的下载。 |
response.files | 页面需要的css和js文件的列表。这些文件将被自动地连接到标准的layout.html头。当需要包含新的css和js文件,只需要将他们加入到这个list。必须注意的是文件的顺序。 |
response.flash | 可选的参数,可以包含在views。通常用来告知用户一些变化。 |
response.headers | HTTP response的头得dict。 |
response.menu | 可选的参数,可以包含在views。一般用来将导航菜单传递给views。它可以使用MENU helper来产生。 |
response.meta | storage对象包含了可选的meta storage信息,例如response.meta.author,response.meta.description和response.meta.keywords。meta变量的内容被web2py_ajax.html(被views/layout.html包含)自动地放置到对应的tag中。 |
response.postprocessing | 这是一个函数list,默认为空。这些函数用来在输出被渲染前过滤一个action的输出的response对象。 |
response.render(view,vars) | 一个方法被用来显示地在controller中调用view。view是可选参数是view文件的名字。vars是一个传给view的dict。 |
response.seesion_file | 文件流包含了session。 |
response.session_file_name | 包含了session被保存的文件名字。 |
response.session_id | 当前session的id。 |
response.session_id_name | 这个应用的session cookie的名字。 |
response.status | HTTP状态代码。默认为200. |
response.stream | 当一个controller返回它,web2py流花文件内容给client。 |
response.subtitle | 包含在views中的可选的参数。应该包含页面的subtitle。 |
response.title | 包含在views中的可选的参数。 |
response_vars | 只能被view访问的一个变量。action不能访问。它包含了action返回给view的值。 |
response.view | 用来渲染页面的view模板的名字。默认为"%s/%s.%s" % (request.controller, request.function, request.extension)。如果以上view模板不存在,则使用"generic.%s" % (request.extension) 。改变该值来修改特定的action的view文件。 |
response.xmlrpc | 当一个controller返回它,这个函数通过xml-rpc暴露该方法。 |
response.js | 可以包含javascript代码。 |
session是storage类型的实例
只要code被同一个用户执行在同一session(用户没有删除session cookies且session没有过期), 就可以使用session.myvar = ‘hello’存储变量,使用a=session.myvar来使用变量。
- session有2个重要的方法:
属性 | 作用 |
---|---|
session.forget(response) | 此方法告诉web2py不保存session |
session.connect(request,response,db,masterapp=None) | db是一个打开的数据库连接。此方法告诉web2py存储session到数据库而不是文件系统 |
web2py将创建表:
db.define_table('web2py_session',
Field('locked', 'boolean', default=False),
Field('client_ip'),
Field('created_datetime', 'datetime', default=now),
Field('modified_datetime', 'datetime'),
Field('unique_key'),
Field('session_data', 'text'))
且存储cpickled sessions在session_data字段。
cookies
- web2py使用python的cookies模块来处理cookies。
- 从浏览器传来的cookies存储在request.cookies。
- 从server传给client的包含在response.cookies。
可以使用下列的方法来设置cookies:
response.cookies['mycookie'] = 'somevalue'
response.cookies['mycookie']['expires'] = 24 * 3600
response.cookies['mycookie']['path'] = '/'
- 使用cookies的方法如下:
if request.cookies.has_key('mycookie'):
value = request.cookies['mycookie'].value
cache
-
cache是web2py执行环境中的一个全局变量。
-
cache有2个属性:
属性 | 含义 |
---|---|
cache.ram | 应用程序缓冲在内存中 |
cache.disk | 应用程序缓冲在硬盘中 |
- 将controller函数的输出缓冲到内存中的例子:
@cache(request.env.path_info, time_expire=5, cache_model=cache.ram)
def cache_controller_in_ram():
import time
t = time.ctime()
return dict(time=t, link=A('click me', _href=request.url))
- 将controller的函数的输出缓冲到硬盘的例子:
@cache(request.env.path_info, time_expire=5, cache_model=cache.disk)
def cache_controller_on_disk():
import time
t = time.ctime()
return dict(time=t, link=A('click to reload', _href=request.url))
URL
- URL用来产生URL的路径。
例如:
URL('a', 'c', 'f', args=['x', 'y'], vars=dict(z='t')) 映射为/a/c/f/x/y?z=t。
HTTP和redirect
- HTTP其实是一个异常类
例如:
400异常raise HTTP(400, "my message")
redirect('http://www.web2py.com') 用来转向http://www.web2py.com/。
网友评论