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。