Pyramid中的request和response

官方API:pyramid.requestpyramid.responsepyramid.httpexceptions唠椭。

Pyramid中的request對(duì)象和response對(duì)象是基于WebOb包的(WebOb包是一個(gè)python庫(kù)跳纳,對(duì) WSGI 的request和response進(jìn)行了封裝)。

所以贪嫂,傳遞給視圖的request對(duì)象是pyramid.request.Request的一個(gè)實(shí)例寺庄,而pyramid.request.Request是 webob.Request的子類。返回的response對(duì)象是pyramid.request.Response的一個(gè)實(shí)例力崇,而pyramid.request.Response是 webob.Response的子類斗塘。

1.Request

request對(duì)象有很多屬性(當(dāng)然也可以包含你自定義的屬性)。下面介紹一些比較重要的:

  • request.method:request請(qǐng)求方式亮靴,比如POST馍盟,GET。
  • request.GET:一個(gè)包含所有g(shù)et請(qǐng)求數(shù)據(jù)的 multidict 字典茧吊,就是URL中的查詢字符串贞岭。
  • request.POST:一個(gè)包含request body的所有數(shù)據(jù)的 multidict 字典,必須是POST形式提交的表單搓侄。
  • request.params:這貨是request.GET和request.POST的結(jié)合瞄桨。也是一個(gè) multidict 字典。
  • request.body:包含整個(gè)request的內(nèi)容讶踪,當(dāng)你不是以一個(gè)表單的形式發(fā)送POST請(qǐng)求時(shí)芯侥,或者發(fā)送一個(gè)PUT請(qǐng)求時(shí),它會(huì)很有用的乳讥。
  • request.json_body:看名字都知道柱查,是json形式的request body。
    JSON形式的request body云石。用來返回json形式的request body數(shù)據(jù)唉工,如果request沒有body或者body不是json形式的,就會(huì)拋出一個(gè)異常留晚。
  • request.cookies: 一個(gè)包含所有cookies的字典酵紫。
  • request.headers: 一個(gè)包含所有headers的字典。

下面介紹request中與URL有關(guān)的一些屬性错维,以http://localhost/app/blog?id=10為例(假設(shè)應(yīng)用安裝在http://localhost/app

  • request.url:獲得整個(gè)url奖地,如http://localhost/app/blog?id=10。
  • request.host:獲得host信息赋焕,如localhost参歹。
  • request.host_url:host和url,如http://localhost隆判。
  • request.application_url:應(yīng)用的url犬庇,如http://localhost/app僧界。
  • reqeust.path_url:完整路徑,如http://localhost/app/blog
  • request.path:去掉host信息的路徑臭挽,如/app/blog捂襟。
  • req.path_qs:在request.path基礎(chǔ)上加了查詢字符串,如/app/blog?id=10欢峰。****
  • req.query_string:查詢字符串葬荷,如 id=10。

request還有一個(gè)屬性charset纽帖,用來設(shè)定字符編碼宠漩。比如你可以在實(shí)例化request對(duì)象時(shí)設(shè)定Request(environ,charset='utf-8').也可以指定req.charset='utf-8'。如果你這樣設(shè)定了懊直,那么req.POST, req.GET, req.params, 還有req.cookies都會(huì)包含unicode字符串扒吁。每一個(gè)方法都有一個(gè)對(duì)應(yīng)的獲取str的方法,比如 req.str_POST室囊,request.str_GET等等雕崩。

2.Multidict

multidict是一個(gè)特殊的字典,一個(gè)key可以對(duì)應(yīng)多個(gè)值波俄。

比如有這樣一個(gè)查詢字符串 ?pref=red&pref=blue晨逝;pref有red和blue兩個(gè)值。當(dāng)你用request.GET['pref']時(shí)會(huì)返回blue懦铺,它只返回最后的那個(gè)值。如果你想返回所有的值支鸡,用request.getall('pref')冬念。Multidict就是元組的列表的一個(gè)視圖,所有的鍵和值都會(huì)被排序好牧挣。

3.Response

一個(gè)response對(duì)象包含3個(gè)基本的部分:

  • response.status:返回信息急前,比如'200 OK',如果你不想返回信息瀑构,而是想返回一個(gè)一個(gè)值裆针,可以用status_int,比如response.status_int=200寺晌。

  • response.headerlist:包含所有header信息的列表世吨,就像 [('Content-Type', 'text/html')]這樣。(你也可以用response.headers訪問header)呻征。

  • response.app_iter:產(chǎn)生response內(nèi)容的可迭代對(duì)象(比如list和generator生成器)耘婚。也可以用其他屬性訪問,只不過形式不一樣陆赋,比如response.body(字符串)沐祷,response.unicode_body(一個(gè)unicode對(duì)象)嚷闭, response.body_file(一個(gè)file-like對(duì)象)

其他屬性還有:

  • response.content_type:設(shè)置content type(不包括charset參數(shù)),比如:response.content_type ='text/html'赖临。

  • response.set_cookie(key, value, max_age=None, path='/', ...):設(shè)置cookie胞锰。

  • response.delete_cookie(key, path='/', domain=None):刪除cookie。

  • response.cache_expires(seconds=0):設(shè)置緩存失效時(shí)間兢榨。

  • response(environ, start_response): WSGI應(yīng)用程序嗅榕。

最后還有一個(gè)pyramid.httpexceptions模塊,告訴Pyramid當(dāng)你response產(chǎn)生異常時(shí)該返回什么色乾。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末誊册,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子暖璧,更是在濱河造成了極大的恐慌案怯,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件澎办,死亡現(xiàn)場(chǎng)離奇詭異嘲碱,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)局蚀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門麦锯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人琅绅,你說我怎么就攤上這事扶欣。” “怎么了千扶?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵料祠,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我澎羞,道長(zhǎng)髓绽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任妆绞,我火速辦了婚禮蒲犬,結(jié)果婚禮上邓夕,老公的妹妹穿的比我還像新娘禽笑。我一直安慰自己恕洲,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布巷帝。 她就那樣靜靜地躺著忌卤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪楞泼。 梳的紋絲不亂的頭發(fā)上驰徊,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天笤闯,我揣著相機(jī)與錄音,去河邊找鬼棍厂。 笑死颗味,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的牺弹。 我是一名探鬼主播浦马,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼张漂!你這毒婦竟也來了晶默?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤航攒,失蹤者是張志新(化名)和其女友劉穎磺陡,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體漠畜,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡币他,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了憔狞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蝴悉。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖瘾敢,靈堂內(nèi)的尸體忽然破棺而出拍冠,到底是詐尸還是另有隱情,我是刑警寧澤簇抵,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布倦微,位于F島的核電站,受9級(jí)特大地震影響正压,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜责球,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一焦履、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧雏逾,春花似錦嘉裤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至仇让,卻和暖如春典奉,著一層夾襖步出監(jiān)牢的瞬間躺翻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工卫玖, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留公你,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓假瞬,卻偏偏與公主長(zhǎng)得像陕靠,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子脱茉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容