Django----Request對象&Response對象

Django 使用Request 對象和Response 對象在系統間傳遞狀態。html

HttpRequest 對象:python

Request.body一個字節字符串,表示原始HTTP 請求的正文。它對於處理非HTML 形式的數據很是有用:二進制圖像、XML等。 若是要處理常規的表單數據,應該使用HttpRequest.POSTajax

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.META

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

HttpResponse 對象

用法:能夠將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")

Response的子類:

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)
相關文章
相關標籤/搜索