HttpRequest 對象

當請求一個頁面時舵稠,Django 會建立一個包含請求元數(shù)據(jù)的 HttpRequest 對象。 當 Django 加載對應(yīng)的視圖時录粱,HttpRequest 對象將作為視圖函數(shù)的第一個參數(shù)(即:request)雌桑。每個視圖會返回一個 HttpResponse 對象。




屬性

  • HttpRequest.scheme

一個字符串荚恶,表示請求的方案(通常是 http 或 https)。

  • HttpRequest.body

一個字節(jié)字符串,表示原始 HTTP 請求的正文倘待。

  • HttpRequest.path

一個字符串,表示請求的頁面的完整路徑组贺,不包含域名凸舵。
例如:"/music/bands/the_beatles/"

  • HttpRequest.path_info

在某些 Web 服務(wù)器配置下,主機名后的 URL 部分被分成腳本前綴部分和路徑信息部分锣披。path_info 屬性將始終包含路徑信息部分贞间,不論使用的 Web 服務(wù)器是什么。使用它代替 path 可以讓代碼在測試和開發(fā)環(huán)境中更容易地切換雹仿。

  • HttpRequest.method

一個字符串增热,表示請求使用的 HTTP 方法。必須使用大寫胧辽。例如:

if request.method == 'GET':
    do_something()
elif request.method == 'POST':
    do_something_else()
  • HttpRequest.encoding

一個字符串峻仇,表示提交的數(shù)據(jù)的編碼方式(如果為 None 則表示使用 DEFAULT_CHARSET 設(shè)置)。你可以通過修改它來修改訪問表單數(shù)據(jù)使用的編碼邑商。

  • HttpRequest.GET

一個類似于字典的對象摄咆,包含 HTTP GET 的所有參數(shù)

  • HttpRequest.POST

一個類似于字典的對象,包含所有給定的 HTTP POST參數(shù)人断,提供了包含表單數(shù)據(jù)的請求吭从。

  • HttpRequest.COOKIES

一個標準的 Python 字典,包含所有的 cookie恶迈。鍵和值都為字符串涩金。

  • HttpRequest.FILES

一個類似于字典的對象,包含所有的上傳文件。FILES 中的每個鍵為 <input type="file" name="" /> 中的 name步做。

  • HttpRequest.META

一個標準的 Python 字典副渴,包含所有的 HTTP 頭部。具體的頭部信息取決于客戶端和服務(wù)器全度,下面是一些示例:

  • CONTENT_LENGTH —— 請求的正文的長度(是一個字符串)煮剧。
  • CONTENT_TYPE —— 請求的正文的MIME 類型。
  • HTTP_ACCEPT —— 響應(yīng)可接收的Content-Type将鸵。
  • HTTP_ACCEPT_ENCODING —— 響應(yīng)可接收的編碼勉盅。
  • HTTP_ACCEPT_LANGUAGE —— 響應(yīng)可接收的語言。
  • HTTP_HOST —— 客服端發(fā)送的HTTP Host 頭部顶掉。
  • HTTP_REFERER —— Referring 頁面菇篡。
  • HTTP_USER_AGENT —— 客戶端的user-agent 字符串。
  • QUERY_STRING —— 單個字符串形式的查詢字符串(未解析過的形式)一喘。
  • REMOTE_ADDR —— 客戶端的IP 地址驱还。
  • REMOTE_HOST —— 客戶端的主機名。
  • REMOTE_USER —— 服務(wù)器認證后的用戶凸克。
  • REQUEST_METHOD —— 一個字符串议蟆,例如"GET" 或"POST"。
  • SERVER_NAME —— 服務(wù)器的主機名萎战。
  • SERVER_PORT —— 服務(wù)器的端口(是一個字符串)咐容。

從上面可以看到,除 CONTENT_LENGTH 和 CONTENT_TYPE 之外蚂维,請求中的任何 HTTP 頭部轉(zhuǎn)換為 META 的鍵時戳粒,都會將所有字母大寫并將連接符替換為下劃線最后加上 HTTP_ 前綴。所以虫啥,一個叫做 X-Bender 的頭部將轉(zhuǎn)換成META 中的 HTTP_X_BENDER 鍵蔚约。

  • HttpRequest.user

一個 AUTH_USER_MODEL 類型的對象,表示當前登錄的用戶涂籽。如果用戶當前沒有登錄苹祟,user 將設(shè)置為 django.contrib.auth.models.AnonymousUser 的一個實例。你可以通過 is_authenticated() 區(qū)分它們评雌,像這樣:

if request.user.is_authenticated():
    # Do something for logged-in users.
else:
    # Do something for anonymous users.




方法

  • HttpRequest.get_host()

根據(jù)從 HTTP_X_FORWARDED_HOST(如果打開 USE_X_FORWARDED_HOST)和 HTTP_HOST 頭部信息返回請求的原始主機树枫。如果這兩個頭部沒有提供相應(yīng)的值,則使用 SERVER_NAME 和 SERVER_PORT景东,在 PEP 3333 中有詳細描述砂轻。

例如:"127.0.0.1:8000"

  • HttpRequest.get_full_path()

返回 path,如果可以將加上查詢字符串斤吐。

例如:"/music/bands/the_beatles/?print=true"

  • HttpRequest.build_absolute_uri(location)

返回 location 的絕對 URI搔涝。如果 location 沒有提供丝里,則設(shè)置為 request.get_full_path()。

如果 URI 已經(jīng)是一個絕對的URI体谒,將不會修改。否則臼婆,使用請求中的服務(wù)器相關(guān)的變量構(gòu)建絕對URI抒痒。

例如:"http://example.com/music/bands/the_beatles/?print=true"

  • HttpRequest.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)

返回簽名過的 Cookie 對應(yīng)的值,如果簽名不再合法則返回 django.core.signing.BadSignature颁褂。如果提供 default 參數(shù)故响,將不會引發(fā)異常并返回 default 的值。

可選參數(shù) salt 可以用來對安全密鑰強力攻擊提供額外的保護颁独。max_age 參數(shù)用于檢查 Cookie 對應(yīng)的時間戳以確保 Cookie 的時間不會超過 max_age 秒彩届。

  • HttpRequest.is_secure()

如果請求時是安全的,則返回 True誓酒;即請求是通過 HTTPS 發(fā)起的樟蠕。

  • HttpRequest.is_ajax()

如果請求是通過 XMLHttpRequest 發(fā)起的,則返回 True靠柑,方法是檢查 HTTP_X_REQUESTED_WITH 頭部是否是字符串 'XMLHttpRequest'寨辩。大部分現(xiàn)代的 JavaScript 庫都會發(fā)送這個頭部。如果你編寫自己的 XMLHttpRequest 調(diào)用(在瀏覽器端)歼冰,你必須手工設(shè)置這個值來讓 is_ajax() 可以工作靡狞。

如果一個響應(yīng)需要根據(jù)請求是否是通過 AJAX 發(fā)起的,并且你正在使用某種形式的緩存例如 Django 的 cache middleware隔嫡, 你應(yīng)該使用 vary_on_headers('HTTP_X_REQUESTED_WITH') 裝飾你的視圖以讓響應(yīng)能夠正確地緩存甸怕。

  • HttpRequest.read(size=None)
  • HttpRequest.readline()
  • HttpRequest.readlines()
  • HttpRequest.xreadlines()
  • HttpRequest.__iter__()

這幾個方法實現(xiàn)類文件的接口用于讀取 HttpRequest 實例。這使得可以用流的方式讀取進來的請求腮恩。一個常見的用例是使用迭代解析器處理大型 XML 有效載荷梢杭,而不在內(nèi)存中構(gòu)造一個完整的 XML 樹。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末秸滴,一起剝皮案震驚了整個濱河市式曲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌缸榛,老刑警劉巖吝羞,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異内颗,居然都是意外死亡钧排,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門均澳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來恨溜,“玉大人符衔,你說我怎么就攤上這事≡阍” “怎么了判族?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長项戴。 經(jīng)常有香客問我形帮,道長,這世上最難降的妖魔是什么周叮? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任辩撑,我火速辦了婚禮,結(jié)果婚禮上仿耽,老公的妹妹穿的比我還像新娘合冀。我一直安慰自己,他們只是感情好项贺,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布君躺。 她就那樣靜靜地躺著,像睡著了一般开缎。 火紅的嫁衣襯著肌膚如雪晰洒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天啥箭,我揣著相機與錄音谍珊,去河邊找鬼。 笑死急侥,一個胖子當著我的面吹牛砌滞,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播坏怪,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼贝润,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了铝宵?” 一聲冷哼從身側(cè)響起打掘,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鹏秋,沒想到半個月后尊蚁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡侣夷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年横朋,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片百拓。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡琴锭,死狀恐怖晰甚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情决帖,我是刑警寧澤厕九,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站地回,受9級特大地震影響扁远,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜落君,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望亭引。 院中可真熱鬧绎速,春花似錦、人聲如沸焙蚓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽购公。三九已至萌京,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間宏浩,已是汗流浹背知残。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留比庄,地道東北人求妹。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像佳窑,于是被迫代替她去往敵國和親制恍。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

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