Django-HTTPRequest物件常用引數
阿新 • • 發佈:2021-06-19
屬性介紹:
- request.scheme
請求的協議種類(http/https) - request.path
請求頁面的完整路徑(get_full_path()在path的基礎上還有查詢條件) - HttpRequest.body
原始的 HTTP 請求體作為一個位元組字串。這對於以不同方式處理非常規 HTML 表單的資料很有用:二進位制影象,XML 有效負載等。對 於處理傳統的表單資料,使用 HttpRequest.POST。
你也可以使用類似檔案的介面 HttpRequest.read() 或 HttpRequest.readline() 從 HttpRequest 中讀取。在使用這些 I/O 流方法中的任何一種方法讀取請求後,訪問 body 屬性會產生 RawPostDataException。 - HttpRequest.method
表請求中使用的 HTTP 方法的字串。保證是大寫字母 - HttpRequest.encoding
表示當前用於解碼錶單提交資料的編碼的字串(或 None,表示使用 DEFAULT_CHARSET 設定)。你可以寫入這個屬性來改變訪問表單資料時使用的編碼。任何後續的屬性訪問(如從 GET 或 POST 中讀取)將使用新的 encoding 值。如果你知道表單資料不是在 DEFAULT_CHARSET 編碼中,這很有用。
5.** HttpRequest.content_type**
代表請求的 MIME 型別的字串,從 CONTENT_TYPE 頭解析。 - HttpRequest.content_params
CONTENT_TYPE 頭中包含的鍵/值引數字典。 - HttpRequest.COOKIES
一個包含所有 cookies 的字典。鍵和值是字串。 - HttpRequest.FILES
一個類似字典的物件,包含所有上傳的檔案。FILES 中的每個鍵是< input type="file" name="" > 中的 name。FILES 中的每個值是一個 UploadedFile。
FILES 只有在請求方法是 POST,並且釋出請求的 < form > 有 enctype="multipart/form-data" 的情況下,才會包含資料。否則,FILES 將是一個類似字典的空白物件。 - HttpRequest.META
一個包含所有可用的 HTTP 標頭檔案的字典。可用的頭資訊取決於客戶端和伺服器,這裡有一些例子- CONTENT_LENGTH —— 請求體的長度(字串)。
- CONTENT_TYPE —— 請求體的 MIME 型別。
- HTTP_ACCEPT —— 可接受的響應內容型別。
- HTTP_ACCEPT_ENCODING —— 可接受的響應編碼。
- HTTP_ACCEPT_LANGUAGE —— 可接受的響應語言。
- HTTP_HOST —— 客戶端傳送的 HTTP 主機頭。
- HTTP_REFERER —— referrer 頁面,如果有的話。
- HTTP_USER_AGENT —— 客戶端的使用者代理字串。
- QUERY_STRING —— 查詢字串,是一個單一的(未解析的)字串。
- REMOTE_ADDR —— 客戶機的 IP 地址。
- REMOTE_HOST —— 客戶機的主機名。
- REMOTE_USER —— Web 伺服器認證的使用者,如果有的話。
- REQUEST_METHOD —— "GET" 或 "POST" 等字串。
- SERVER_NAME —— 伺服器的主機名。
- SERVER_PORT —— 伺服器的埠(字串)。
除了上面給出的 CONTENT_LENGTH 和 CONTENT_TYPE 之外,請求中的任何 HTTP 頭都會被轉換為 META 鍵,方法是將所有字元轉換為大寫字母,用下劃線代替任何連字元,並在名稱前加上 HTTP_` 字首。
- HttpRequest.headers
一個不區分大小寫的類似字典的物件,提供對請求中所有 HTTP 字首頭的訪問(加上 Content-Length 和 Content-Type)。
當顯示每個請求頭時,請求頭名稱都是用標題的形式來表示的(例如 User-Agent)。你可以不分大小寫的訪問請求頭
例如在 Django 模板中使用,請求頭也可以用下劃線代替連字元來查詢:
{{ request.headers.user_agent }}
- HttpRequest.resolver_match
ResolverMatch 的一個例項,代表解析後的 URL。這個屬性只有在 UR L解析發生後才會被設定,這意味著它在所有的檢視中都是可用的,但在 URL 解析發生前被執行的中介軟體中則不可用(不過你可以在 process_view() 中使用它)。
12.** HttpRequest.session**
來自 SessionMiddleware。一個可讀可寫的,類似字典的物件,代表當前會話。 - HttpRequest.user
從 AuthenticationMiddleware。AUTH_USER_MODEL 的一個例項,代表當前登入的使用者。如果使用者當前沒有登入,user 將被設定為一個 AnonymousUser 的例項。你可以用 is_authenticated 來區分它們:if request.user.is_authenticated: # Do something for logged-in users. else: # Do something for anonymous users.
方法:
- HttpRequest.get_port()
使用 HTTP_X_FORWARDED_PORT (如果 :set:USE_X_FORWARDED_PORT
已啟用)和 SERVER_PORT META 變數中的資訊,按順序返回請求的起始埠。 - HttpRequest.get_full_path()
返回 path,加上附加的查詢字串(如果適用)。
例如:"/music/bands/the_beatles/?print=true" - HttpRequest.get_host()
使用 HTTP_X_FORWARDED_HOST (如果 USE_X_FORWARDED_HOST 已啟用)和 HTTP_HOST 頭資訊,按順序返回請求的發起主機。如果它們沒有提供一個值,則該方法使用 SERVER_NAME 和 SERVER_PORT 的組合, - HttpRequest.build_absolute_uri(location=None)
返回 location 的絕對 URI 形式。如果沒有提供 location,location 將被設定為 request.get_full_path()。
如果 location 已經是一個絕對 URI,它將不會被改變request.build_absolute_uri() 'https://example.com/music/bands/the_beatles/?print=true' request.build_absolute_uri('/bands/') 'https://example.com/bands/' request.build_absolute_uri('https://example2.com/bands/') 'https://example2.com/bands/'
- HttpRequest.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)
request.get_signed_cookie('name') 'Tony' request.get_signed_cookie('name', salt='name-salt') 'Tony' # assuming cookie was set using the same salt request.get_signed_cookie('nonexistent-cookie') ... KeyError: 'nonexistent-cookie' request.get_signed_cookie('nonexistent-cookie', False) False request.get_signed_cookie('cookie-that-was-tampered-with') ... BadSignature: ... request.get_signed_cookie('name', max_age=60) ... SignatureExpired: Signature age 1677.3839159 > 60 seconds request.get_signed_cookie('name', False, max_age=60) False