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。
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,服務器內部錯誤
Django Request 與Response對象