官方API:pyramid.request、pyramid.response 和 pyramid.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í)該返回什么色乾。