1. 程式人生 > 其它 >47 django之HttpRequest物件

47 django之HttpRequest物件

request屬性:

django將請求報文中的請求行、首部資訊、內容主體封裝成 HttpRequest 類中的屬性。 除了特殊說明的之外,其他均為只讀的

1 HttpRequest.GET

一個類似於字典的物件,包含 HTTP GET 的所有引數

2 HttpRequest.POST


  一個類似於字典的物件,如果請求中包含表單資料,則將這些資料封裝成 QueryDict 物件。

  POST 請求可以帶有空的 POST 字典 —— 如果通過 HTTP POST 方法傳送一個表單,但是表單中沒有任何的資料,QueryDict 物件依然會被建立。
因此,不應該使用 if request.POST 來檢查使用的是否是POST 方法;應該使用 if request.method == "POST"
  另外:如果使用 POST 上傳檔案的話,檔案資訊將包含在 FILES 屬性中。

注意:鍵值對的值是多個的時候,比如checkbox型別的input標籤,select標籤,需要用:
request.POST.getlist("hobby")

3 HttpRequest.body

一個字串,代表請求報文的主體。

在處理非 HTTP 形式的報文時非常有用,例如:二進位制圖片、XML,Json等。
但是,如果要處理表單資料的時候,推薦還是使用 HttpRequest.POST

4 HttpRequest.path

一個字串,表示請求的路徑元件(不含域名)。
例如:"/music/bands/the_beatles/"

5.HttpRequest.method

一個字串,表示請求使用的HTTP 方法。必須使用大寫。
例如:"GET"、"POST"

6 HttpRequest.encoding

一個字串,表示提交的資料的編碼方式(如果為 None 則表示使用 DEFAULT_CHARSET 的設定,預設為 'utf-8')。
這個屬性是可寫的,你可以修改它來修改訪問表單資料使用的編碼。
接下來對屬性的任何訪問(例如從 GET 或 POST 中讀取資料)將使用新的 encoding 值。
如果你知道表單資料的編碼不是 DEFAULT_CHARSET ,則使用它。

7.HttpRequest.META

  一個標準的Python 字典,包含所有的HTTP 首部。具體的頭部資訊取決於客戶端和伺服器,下面是一些示例:

  取值:

CONTENT_LENGTH —— 請求的正文的長度(是一個字串)。
CONTENT_TYPE —— 請求的正文的MIME 型別。
HTTP_ACCEPT —— 響應可接收的Content-Type。
HTTP_ACCEPT_ENCODING —— 響應可接收的編碼。
HTTP_ACCEPT_LANGUAGE —— 響應可接收的語言。
HTTP_HOST —— 客服端傳送的HTTP Host 頭部。
HTTP_REFERER —— Referring 頁面。
HTTP_USER_AGENT —— 客戶端的
user-agent
字串。
QUERY_STRING —— 單個字串形式的查詢字串(未解析過的形式)。
REMOTE_ADDR —— 客戶端的IP 地址。
REMOTE_HOST —— 客戶端的主機名。
REMOTE_USER —— 伺服器認證後的使用者。
REQUEST_METHOD —— 一個字串,例如"GET" 或"POST"。
SERVER_NAME —— 伺服器的主機名。
SERVER_PORT —— 伺服器的埠(是一個字串)。

  從上面可以看到,除 CONTENT_LENGTH 和 CONTENT_TYPE 之外,請求中的任何 HTTP 首部轉換為 META 的鍵時,

都會將所有字母大寫並將連線符替換為下劃線最後加上 HTTP_ 字首。

所以,一個叫做 X-Bender 的頭部將轉換成 META 中的 HTTP_X_BENDER 鍵。

8.HttpRequest.FILES

  一個類似於字典的物件,包含所有的上傳檔案資訊。

FILES 中的每個鍵為<input type="file" name="" /> 中的name,值則為對應的資料。

  注意,FILES 只有在請求的方法為POST 且提交的<form> 帶有enctype="multipart/form-data" 的情況下才會

包含資料。否則,FILES 將為一個空的類似於字典的物件。

9.HttpRequest.COOKIES

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

10.HttpRequest.session

  一個既可讀又可寫的類似於字典的物件,表示當前的會話。只有當Django 啟用會話的支援時才可用。

11.HttpRequest.user(使用者認證元件下使用)

  一個 AUTH_USER_MODEL 型別的物件,表示當前登入的使用者。

  如果使用者當前沒有登入,user 將設定為 django.contrib.auth.models.AnonymousUser 的一個例項。你可以通過 is_authenticated() 區分它們。

例如:

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

user 只有當Django 啟用 AuthenticationMiddleware中介軟體時才可用。

-------------------------------------------------------------------------------------

匿名使用者

class models.AnonymousUser

django.contrib.auth.models.AnonymousUser 類實現了django.contrib.auth.models.User 介面,但具有下面幾個不同點:

id 永遠為None。
username 永遠為空字串。
get_username() 永遠返回空字串。
is_staff 和 is_superuser 永遠為False。
is_active 永遠為 False。
groups 和 user_permissions 永遠為空。
is_anonymous() 返回True 而不是False。
is_authenticated() 返回False 而不是True。
set_password()、check_password()、save() 和delete() 引發 NotImplementedError。

New in Django 1.8:

新增 AnonymousUser.get_username() 以更好地模擬 django.contrib.auth.models.User。