request 簡介
request對象是web2py中常見的類型
gluon.storage.storage的實例生巡,gluon.storage.storage是python的dict的子類
喷好。
gluon.storage.storage與dict的區(qū)別:
可以像訪問屬性一樣訪問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的環(huán)境變量别渔,包括來自HTTP request的HTTP header和標準的WSGI參數(shù)附迷。環(huán)境變量都被轉化為小寫,點被轉化為下劃線 |
request.application | 請求的應用的名字(從request.env.path_info解析而來 |
request.controller | 請求的controller的名字(從request.env.path_info解析而來) |
request.function | 請求的函數(shù)的名字(從request.env.path_info解析而來) |
request.extension | extension默認為html钠糊,如果controller函數(shù)返回一個dictionary且沒有指定view挟秤,extension將被用來決定使用何種view來渲染dictionary。(從request.env.path_info解析而來) |
request.folder | 應用程序的目錄 |
request.now | 存儲了當前request的時間戳抄伍,類型為datetime.datetime |
request.args | controller函數(shù)后面的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管宵,如果函數(shù)通過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 | 一個方法用來實現(xiàn)controller函數(shù)允許文件的下載。 |
response.files | 頁面需要的css和js文件的列表炸庞。這些文件將被自動地連接到標準的layout.html頭钱床。當需要包含新的css和js文件,只需要將他們加入到這個list埠居。必須注意的是文件的順序查牌。 |
response.flash | 可選的參數(shù),可以包含在views滥壕。通常用來告知用戶一些變化纸颜。 |
response.headers | HTTP response的頭得dict。 |
response.menu | 可選的參數(shù)绎橘,可以包含在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 | 這是一個函數(shù)list候齿,默認為空。這些函數(shù)用來在輸出被渲染前過濾一個action的輸出的response對象苫亦。 |
response.render(view,vars) | 一個方法被用來顯示地在controller中調用view毛肋。view是可選參數(shù)是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狀態(tài)代碼。默認為200. |
response.stream | 當一個controller返回它巍膘,web2py流花文件內容給client厂财。 |
response.subtitle | 包含在views中的可選的參數(shù)。應該包含頁面的subtitle峡懈。 |
response.title | 包含在views中的可選的參數(shù)璃饱。 |
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返回它廓潜,這個函數(shù)通過xml-rpc暴露該方法。 |
response.js | 可以包含javascript代碼善榛。 |
session是storage類型的實例
只要code被同一個用戶執(zhí)行在同一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是一個打開的數(shù)據庫連接樱蛤。此方法告訴web2py存儲session到數(shù)據庫而不是文件系統(tǒng) |
web2py將創(chuàng)建表:
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執(zhí)行環(huán)境中的一個全局變量。
cache有2個屬性:
屬性 | 含義 |
---|---|
cache.ram | 應用程序緩沖在內存中 |
cache.disk | 應用程序緩沖在硬盤中 |
- 將controller函數(shù)的輸出緩沖到內存中的例子:
@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的函數(shù)的輸出緩沖到硬盤的例子:
@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/。