Django 使用Request 對象和Response 對象在系統間傳遞狀態。html
HttpRequest 對象:python
Request.body:一個字節字符串,表示原始HTTP 請求的正文。它對於處理非HTML 形式的數據很是有用:二進制圖像、XML等。 若是要處理常規的表單數據,應該使用HttpRequest.POST。ajax
Request.path:一個字符串,表示請求的頁面的完整路徑,不包含域名:"/music/bands/the_beatles/"django
Request.path_info:在某些Web 服務器配置下,主機名後的URL 部分被分紅腳本前綴部分和路徑信息部分。path_info 屬性將始終包含路徑信息部分,不論使用的Web 服務器是什麼。使用它代替path 可讓代碼在測試和開發環境中更容易地切換。json
Request.method:一個字符串,表示請求使用的HTTP 方法。必須使用大寫(GET/POST)服務器
Request.GET:一個相似於字典的對象,包含HTTP GET 的全部參數cookie
Request.POST:一個包含全部給定的HTTP POST參數的類字典對象,提供了包含表單數據的請求。POST 不包含上傳的文件信息。參見FILES。
app
Request.COOKIES:個標準的Python 字典,包含全部的cookie。鍵和值都爲字符串。
Request.FILES:一個相似於字典的對象,包含全部的上傳文件。FILES 中的每一個鍵爲<input type="file"name="" /> 中的name。ide
FILES 只有在請求的方法爲POST 且提交的<form> 帶有enctype="multipart/form-data" 的狀況下才會包含數據。不然,FILES 將爲一個空的相似於字典的對象。函數
一個標準的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 —— 服務器的端口(是一個字符串)。
Request.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.
Request.get_host():根據從HTTP_X_FORWARDED_HOST(若是打開USE_X_FORWARDED_HOST)和HTTP_HOST 頭部信息返回請求的原始主機。
Request.get_full_path():返回path,若是能夠將加上查詢字符串。"/music/bands/the_beatles/?print=true"
Request.is_ajax():若是請求是經過XMLHttpRequest(ajax) 發起的,則返回True,
用法:能夠將response 看作一個類文件對象
>>> from django.http import HttpResponse >>> response = HttpResponse("Here's the text of the Web page.") >>> response = HttpResponse("Text only, please.", content_type="text/plain")
HttpResponseRedirect:用來重定向的地址(http://www.yahoo.com/search/;/search/)注意!這個響應會返回一個302的HTTP狀態碼。
HttpResponsePermanentRedirect:與ResponseRedirect同樣,可是它會返回一個永久的重定向(HTTP狀態碼301)而不是一個「found」重定向(狀態碼302)。
HttpResponseNotModified:構造函數不會有任何的參數,而且不該該向這個響應(response)中加入內容(content)。使用此選項可指定自用戶上次請求(狀態代碼304)以來還沒有修改頁面。
HttpResponseBadRequest:與HttpResponse的行爲相似,可是使用了一個400的狀態碼。
HttpResponseForbidden:與HttpResponse相似,但使用403狀態代碼。
HttpResponseNotAllowed:與HttpResponse相似,但使用405狀態碼。構造函數的第一個參數是必須的:一個容許使用的方法構成的列表(例如,['GET', 'POST'])。
HttpResponseGone:與HttpResponse相似,但使用410狀態碼。
HttpResponseServerError:與HttpResponse相似,但使用500狀態代碼。
JsonResponse:
Content-Type 頭部設置爲application/json。它的第一個參數data,應該爲一個dict 實例。若是safe 參數設置爲False,它能夠是任何可JSON 序列化的對象。布爾參數safe 默認爲True。若是設置爲False,能夠傳遞任何對象進行序列化(不然,只容許dict 實例)。若是safe 爲True,而第一個參數傳遞的不是dict 對象,將拋出一個TypeError。
>>> from django.http import JsonResponse >>> response = JsonResponse({'foo': 'bar'}) >>> response.content '{"foo": "bar"}' 序列化非字典對象 response = JsonResponse([1, 2, 3], safe=False)