web2py核心詳解

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應用
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/。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末哪痰,一起剝皮案震驚了整個濱河市遂赠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌晌杰,老刑警劉巖跷睦,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異肋演,居然都是意外死亡抑诸,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進店門爹殊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蜕乡,“玉大人,你說我怎么就攤上這事梗夸〔懔幔” “怎么了?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵反症,是天一觀的道長称簿。 經常有香客問我,道長惰帽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任父虑,我火速辦了婚禮该酗,結果婚禮上,老公的妹妹穿的比我還像新娘士嚎。我一直安慰自己呜魄,他們只是感情好,可當我...
    茶點故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布莱衩。 她就那樣靜靜地躺著爵嗅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪笨蚁。 梳的紋絲不亂的頭發(fā)上睹晒,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天趟庄,我揣著相機與錄音,去河邊找鬼伪很。 笑死戚啥,一個胖子當著我的面吹牛,可吹牛的內容都是我干的锉试。 我是一名探鬼主播猫十,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼呆盖!你這毒婦竟也來了拖云?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤应又,失蹤者是張志新(化名)和其女友劉穎宙项,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體丁频,經...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡杉允,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了席里。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叔磷。...
    茶點故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖奖磁,靈堂內的尸體忽然破棺而出改基,到底是詐尸還是另有隱情,我是刑警寧澤咖为,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布秕狰,位于F島的核電站,受9級特大地震影響躁染,放射性物質發(fā)生泄漏鸣哀。R本人自食惡果不足惜裹刮,卻給世界環(huán)境...
    茶點故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一厌秒、第九天 我趴在偏房一處隱蔽的房頂上張望场靴。 院中可真熱鬧乾胶,春花似錦涧郊、人聲如沸博敬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽埋嵌。三九已至破加,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間雹嗦,已是汗流浹背范舀。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工合是, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人尿背。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓端仰,卻偏偏與公主長得像,于是被迫代替她去往敵國和親田藐。 傳聞我的和親對象是個殘疾皇子荔烧,可洞房花燭夜當晚...
    茶點故事閱讀 45,446評論 2 359

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)汽久,斷路器鹤竭,智...
    卡卡羅2017閱讀 134,695評論 18 139
  • 國家電網公司企業(yè)標準(Q/GDW)- 面向對象的用電信息數(shù)據交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 11,004評論 6 13
  • scrapy學習筆記(有示例版) 我的博客 scrapy學習筆記1.使用scrapy1.1創(chuàng)建工程1.2創(chuàng)建爬蟲模...
    陳思煜閱讀 12,713評論 4 46
  • 感恩方姐組織日行一善群到養(yǎng)老院送溫暖的活動【按迹看到那些慈善的老人雖然遠離家人臀稚,但是在敬老院都生活得很好,身體也很健康...
    武丹yoyo閱讀 177評論 0 1
  • 01. 曾有位同事這樣對我說,“你父母把你的性格培養(yǎng)的真好散劫,我以后也想有個你這樣的閨女稚机。” 后來他就將我捧成了“辦...
    小學生閱讀指南閱讀 1,691評論 0 4