1. 程式人生 > >Django Request 與Response對象

Django Request 與Response對象

關於 風險 格式 encoding request對象 orb min 轉換成 path_info

  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,服務器內部錯誤

Django Request 與Response對象