1. 程式人生 > >Django Request 與Response物件

Django Request 與Response物件

  Django使用請求和響應物件在系統中傳遞狀態。當請求頁面時,Django建立一個HttpRequest物件,該物件包含關於請求的元資料。

然後Django載入適當的檢視,將HttpRequest作為第一個引數傳遞給檢視函式。每個檢視都負責返回HttpResponse物件。


 

一、HttpRequest

HttpRequet.schema:所使用的Http協議(http,https)

HttpRequest.body:請求體

HttpRequest.path:表示請求頁面的完整路徑的字串,不包括模式或域Http。

HttpRequest.path_info:與path相比只包含路徑資訊

HttpRequest.method:請求方法

HttpRequest.encoding:表示用於解碼錶單提交資料的當前編碼(或無編碼

HttpRequest.content_type:表示請求MIME型別的字串,從CONTENT_TYPE報頭解析。

HttpRequest.content_params:一個包含在CONTENT_TYPE頭中的鍵/值引數的字典。

HttpRequest.COOKIES:包含所有cookie的字典。鍵和值是字串。

HttpRequest.FILES:一個類字典的物件,包含所有上傳的檔案。檔案中的每個鍵都是 上傳檔案的表單的名稱。檔案中的每個值都是UploadedFile。

只有當請求方法是POST且傳送到請求的具有enctype="multipart/form-data"時,檔案才會包含資料。否則,檔案將是一個空白的類字典物件。

HttpRequest.session:表示當前會話的可讀和可寫的、類似詞典的物件。

HttpRequest.ste:當前站點

HttpRequest.user:表示當前登入的使用者。如果使用者當前沒有登入,使用者將被設定為AnonymousUser例項。

HttpRequest.get_full_path:獲取當前URL路徑

HttpRequest.get_signed_cookie():返回已簽名cookie的cookie值,或引發django.core.sign。如果簽名不再有效,則出現BadSignature異常。如果您提供預設引數,異常將被抑制,而該預設值將被返回。

HttpRequest.is_ajax():判斷是否是Ajax請求


 

二、QueryDict物件

大部分字典方法都適用

QueryDict.__init__(query_string=None,mutable=False,encoding=None)

>>> QueryDict('a=1&a=2&c=3')
<QueryDict: {'a': ['1', '2'], 'c': ['3']}>

QueryDict.fromkeys()

>>> QueryDict.fromkeys(['a', 'a', 'b'], value='val')
<QueryDict: {'a': ['val', 'val'], 'b': ['val']}>

QueryDict.__geyitem__(key):返回key的值

QueryDict.__contains__(key):允許in運算

QueryDict.lists():與items()類似,只不過它以列表的形式包含字典中每個成員的所有值。

>>> q = QueryDict('a=1&a=2&a=3')
>>> q.lists()
[('a', ['1', '2', '3'])]

 

QueryDict.urlencode():

>>> q = QueryDict('a=2&b=3&b=5')
>>> q.urlencode()
'a=2&b=3&b=5'

 


 

三、HttpResponse物件

向HttpResponse中傳遞迭代器,將會立即遍歷迭代器,轉換成字串後丟棄。如果需要將響應從迭代器流到客戶機,則必須使用StreamingHttpResponse類。

新增鍵值對

>>> response = HttpResponse()
>>> response['Age'] = 120
>>> del response['Age']

HttpResponse.__init__(content='', content_type=None, status=200, reason=None, charset=None):初始化一個response

HttpResponse.set_cookie(key, value='', max_age=None, expires=None, path='/', domain=None, secure=None, httponly=False, samesite=None):設定cookie

max_age應該是秒數,或者None,如果cookie僅持續客戶端的瀏覽器會話時間,則為0秒(預設)。如果未指定過期,將計算過期時間。

expires可以是“Wdy, DD
-Mon-YY HH:MM:SS GMT”格式的字串,也可以是datetime格式。UTC中的datetime物件。如果expires是datetime物件,則計算max_age。
如果您想設定跨域cookie,請使用domain。例如,domain
="example.com"將設定一個cookie,該cookie可以被www.example.com、blog.example.com等域讀取。否則,cookie只能被設定cookie的域讀取
如果希望阻止客戶端JavaScript訪問cookie,請使用httponly
=True。
HTTPOnly是一個包含在Set
-Cookie HTTP響應頭中的標誌。它不是RFC 2109 cookie標準的一部分,也不是所有瀏覽器都一致支援它。但是,當它設定時,它可能是一種降低客戶端指令碼訪問受保護cookie資料的風險的有用方法。
使用samesite
='Strict'或samesite='Lax'告訴瀏覽器在執行跨源請求時不要傳送此cookie。並不是所有瀏覽器都支援SameSite。

HttpResponse.set_signed_cookis():與set_cookie()類似,但是在設定cookie之前對其進行加密簽名。與HttpRequest.get_signed_cookie()一起使用。您可以使用可選的salt引數來新增鍵強度,但是您需要記住將它傳遞給相應的HttpRequest.get_signed_cookie()呼叫。

HttpResponse.delete_cookie(key,path='/',domain=None):即使cookie不存在也不會被刪除。由於cookie的工作方式,路徑和域應該與在set_cookie()中使用的值相同——否則cookie可能不會被刪除。


四、HttpResponse子類

HttpResponseRedirect():返回狀態碼302引數url,響應將會被重定向到url

HttpResponsePermanentRedirect():狀態碼302永久重定向到某個url

HttpResponseNotModified():建構函式不接受任何引數,並且不應該向該響應新增任何內容。使用它可以指定自使用者上次請求(狀態程式碼304)以來頁面沒有被修改。

HttpResponseBadRequest():狀態碼400,請求錯誤

HttpResponseNotFound():狀態碼404,請求出錯,頁面找不到

HttpResponseForbidden():狀態碼403

HttpResponseServerError():狀態碼500,伺服器內部錯誤