1. 程式人生 > 其它 >Django-HTTPRequest物件常用引數

Django-HTTPRequest物件常用引數

屬性介紹:

  1. request.scheme
    請求的協議種類(http/https)
  2. request.path
    請求頁面的完整路徑(get_full_path()在path的基礎上還有查詢條件)
  3. HttpRequest.body
    原始的 HTTP 請求體作為一個位元組字串。這對於以不同方式處理非常規 HTML 表單的資料很有用:二進位制影象,XML 有效負載等。對 於處理傳統的表單資料,使用 HttpRequest.POST。
    你也可以使用類似檔案的介面 HttpRequest.read() 或 HttpRequest.readline() 從 HttpRequest 中讀取。在使用這些 I/O 流方法中的任何一種方法讀取請求後,訪問 body 屬性會產生 RawPostDataException。
  4. HttpRequest.method
    表請求中使用的 HTTP 方法的字串。保證是大寫字母
  5. HttpRequest.encoding
    表示當前用於解碼錶單提交資料的編碼的字串(或 None,表示使用 DEFAULT_CHARSET 設定)。你可以寫入這個屬性來改變訪問表單資料時使用的編碼。任何後續的屬性訪問(如從 GET 或 POST 中讀取)將使用新的 encoding 值。如果你知道表單資料不是在 DEFAULT_CHARSET 編碼中,這很有用。
    5.** HttpRequest.content_type**
    代表請求的 MIME 型別的字串,從 CONTENT_TYPE 頭解析。
  6. HttpRequest.content_params

    CONTENT_TYPE 頭中包含的鍵/值引數字典。
  7. HttpRequest.COOKIES
    一個包含所有 cookies 的字典。鍵和值是字串。
  8. HttpRequest.FILES
    一個類似字典的物件,包含所有上傳的檔案。FILES 中的每個鍵是< input type="file" name="" > 中的 name。FILES 中的每個值是一個 UploadedFile。
    FILES 只有在請求方法是 POST,並且釋出請求的 < form > 有 enctype="multipart/form-data" 的情況下,才會包含資料。否則,FILES 將是一個類似字典的空白物件。
  9. 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_` 字首。
  10. HttpRequest.headers
    一個不區分大小寫的類似字典的物件,提供對請求中所有 HTTP 字首頭的訪問(加上 Content-Length 和 Content-Type)。
    當顯示每個請求頭時,請求頭名稱都是用標題的形式來表示的(例如 User-Agent)。你可以不分大小寫的訪問請求頭
    例如在 Django 模板中使用,請求頭也可以用下劃線代替連字元來查詢:
    {{ request.headers.user_agent }}
  11. HttpRequest.resolver_match
    ResolverMatch 的一個例項,代表解析後的 URL。這個屬性只有在 UR L解析發生後才會被設定,這意味著它在所有的檢視中都是可用的,但在 URL 解析發生前被執行的中介軟體中則不可用(不過你可以在 process_view() 中使用它)。
    12.** HttpRequest.session**
    來自 SessionMiddleware。一個可讀可寫的,類似字典的物件,代表當前會話。
  12. 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.
    

方法:

  1. HttpRequest.get_port()
    使用 HTTP_X_FORWARDED_PORT (如果 :set:USE_X_FORWARDED_PORT 已啟用)和 SERVER_PORT META 變數中的資訊,按順序返回請求的起始埠。
  2. HttpRequest.get_full_path()
    返回 path,加上附加的查詢字串(如果適用)。
    例如:"/music/bands/the_beatles/?print=true"
  3. HttpRequest.get_host()
    使用 HTTP_X_FORWARDED_HOST (如果 USE_X_FORWARDED_HOST 已啟用)和 HTTP_HOST 頭資訊,按順序返回請求的發起主機。如果它們沒有提供一個值,則該方法使用 SERVER_NAME 和 SERVER_PORT 的組合,
  4. 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/'
    
  5. 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