HttpRequest代表來自客戶端的單獨HTTP請求。
HttpRequest實例的屬性包含關於此請求的最重要信息(有關詳細信息,請參見表H-1)。除會話外的所有屬性都應被視為只讀。
表h-1。httprequest對象的屬性
屬性
形容
Path是壹個字符串,表示提交請求頁面的完整地址,不包括域名,例如“/music/bands/the_beatles/”。
方法
表示用於提交請求的HTTP方法。它總是大寫的。例如:
if request . method = =‘GET‘:
做某事()
elif request . method = =‘POST‘:
do_something_else()
獲取壹個類字典對象,其中包含HTTP GET參數的所有信息。請參見QueryDict文檔。
郵政
壹個類字典對象,包含關於HTTP的POST參數的所有信息。請參見QueryDict文檔。
通過POST提交的請求可能包含壹個空的POST字典,也就是說,通過POST方法提交的表單可能不包含數據。因此,如果需要。不應使用POST來判斷POST方法的使用,但如果request . method = =“POST“(請參見表中的方法條目)。
註意:帖子不包含文件上傳信息。參見文件。
請求
為了方便起見,這是壹個類字典對象,首先搜索POST,然後搜索GET。受PHP的$ _ REQEUST的啟發。
例如,如果GET = {“name“:“john“},POST = {“age“:‘34“},則REQUEST【“name“】將為“John“,REQUEST【“age“】將為“34“。
強烈建議使用GET和POST而不是REQUEST。這是為了向前兼容和更清晰的表示。
cookies是壹個包含所有COOKIES的標準Python字典。鍵和值都是字符串。有關cookie使用的更多信息,請參見第12章。
文件
包含所有上載文件的類字典對象。文件的密鑰來自
Filename:表示上傳文件的文件名的字符串。
內容類型:上傳文件的內容類型。
內容:上傳文件的原始內容。
請註意,僅當請求的方法是POST且已提交時,文件才可用
元宇宙
包含所有有效HTTP頭信息的標準Python字典。有效的標頭信息與客戶端和服務器相關。這裏有幾個例子:
內容長度
內容類型
QUERY_STRING:未解析的原始請求字符串。
遠程ADDR:客戶端IP地址。
REMOTE_HOST:客戶端的主機名。
SERVER_NAME:服務器主機名。
SERVER_PORT:服務器端口號。
任何在META中有效的HTTP頭信息都是帶有HTTP_ prefix的鍵,例如:
HTTP _接受_編碼
HTTP _接受_語言
HTTP_HOST:客戶端發送的主機頭信息。
HTTP_REFERER:指向的頁面,如果它存在的話。
HTTP_USER_AGENT:客戶端的用戶代理字符串。
http _ x _ bender:x-bender頭信息的值(如果設置了的話)。
用戶
django . contrib . auth . models . user對象表示當前登錄的用戶。如果當前用戶沒有登錄,用戶將被設置為django的壹個實例。contrib.auth.models .匿名用戶。它們可以與is_authenticated()區分開來:
if request . user . is _ authenticated():
#為登錄用戶做點什麽。
否則:
#為匿名用戶做點什麽。
僅當Django激活AuthenticationMiddleware時,用戶才有效。
有關身份驗證和用戶的完整詳細信息,請參見第12章。
Session壹個表示當前會話的可讀可寫的類字典對象。僅當Django激活會話支持時有效。請參見第12章。
發布原始數據。用於復雜的數據處理。
請求對象還包含壹些有用的方法,如表H-2所示。
表H-2。HttpRequest的方法
方法
形容
_ _ getitem _ _(key)
請求給定鍵的GET/POST值,首先查找POST,然後查找GET。如果該鍵不存在,則會引發異常KeyError。
該方法使用戶能夠通過訪問字典來訪問HttpRequest的實例。
例如,請求【“foo“】與檢查請求相同。在檢查請求之前發布【“foo“】。GET【“foo“】。
Has_key()返回True或False,指示是否請求。獲取或請求。POST包含給定的鍵。
Get_full_path()返回路徑,如果請求字符串有效,則將其追加到請求字符串之後。例如“/music/bands/the _ beats/?print=true“。
如果請求是安全的,Is_secure()將返回True。換言之,請求是以HTTPS的形式提交的。
QueryDict對象
在HttpRequest對象中,GET和POST屬性都是django.http.QueryDict QueryDict是壹個類似於字典的類,專門用於用壹個鍵處理多值。當處理壹些HTML表單中的元素時,尤其是
翻譯....
QueryDict實例是不可變的,除非創建了copy()副本。也就是說,請求的屬性。發布和請求。GET不能直接更改。
QueryDict實現了所有標準的字典方法,因為它是字典的子類。表H-3中列出了與它不同的所有內容。
表H-3。查詢詞典和標準詞典的區別
方法
不同於標準詞典。
__getitem__與字典相同。但是,當壹個鍵有多個值時,__getitem__()返回最後壹個值。
__setitem__將給定鍵的值設置為【value】(只有壹個value元素的Python列表)。請註意,它只能被稱為變量QueryDict(由copy()創建),因為它對其他字典函數有副作用。
Get()如果壹個鍵有多個值,如__getitem__,get()將返回最後壹個值。
更新()
該參數是壹個查詢字典或標準字典。和標準詞典
更新不同,此方法*添加*而不是替換內容:
& gt& gt& gtq = query dict(‘a = 1‘)
& gt& gt& gtq = q . copy()#使其成為變量。
& gt& gt& gtq . update({“a“:“2“})
& gt& gt& gtq . getlist(‘a‘)
['1', '2']
& gt& gt& gtq【‘a‘】#返回最後壹個值。
['2']
項目()
與標準字典中的items()方法類似,不同之處在於它返回像_ _ getitem()_ _這樣的最後壹個值:
& gt& gt& gtq = query dict(‘a = 1 & amp;a = 2 & ampa = 3’)
& gt& gt& gt問題項()
【(‘a’,‘3’)】
Values()與標準字典中的values()方法相同,只是它返回像_ _ getitem()_ _這樣的最後壹個值。
此外,QueryDict具有表H-4中列出的方法。
表H-4。其他(非字典)查詢方法
方法
形容
Copy()使用Python標準庫中的copy.deepcopy()返回對象的副本。副本是可變的,也就是說,您可以更改其值。
getlist(key)以Python列表的形式返回所請求的鍵的數據。如果該鍵不存在,則返回壹個空列表。它保證將返回某種形式的列表。
set list(key,list_)將給定鍵的鍵值設置為list_(不同於__setitem__())。
appendlist(key,item)將項目添加到與key相關的列表中。
setlist default(key,l)與setdefault相同,只是它的第二個參數是列表而不是值。
列表()
與items()類似,不同之處在於它以列表的形式返回字典中每個成員的所有值。例如:
& gt& gt& gtq = query dict(‘a = 1 & amp;a = 2 & ampa = 3’)
& gt& gt& gt問題列表()
【(‘a‘,【‘1‘,‘2‘,‘3‘)】】
Urlencode()返回請求字符串格式的數據字符串(例如,“A = 2 &;b = 3 & ampb=5“)。
壹個完整的例子。
例如,給定以下HTML表單:
& lt表單操作=“/foo/bar/“method =“post“& gt;
& lt輸入type =“text“name =“your _ name“/& gt;
& lt選擇multiple =“multiple“name =“bands“& gt;
& lt選項值=“Beatles“& gt;甲殼蟲樂隊& lt/option & gt;
& lt選項值=“who“& gt;世界衛生組織</option & gt;
& lt選項值=“僵屍“& gt僵屍& lt/option & gt;
& lt/select & gt;
& lt輸入類型=“submit“/& gt。
& lt/form & gt;
如果用戶在your_name中輸入“John Smith”,並且在多選框中選擇了披頭士和僵屍,那麽Django的請求對象如下所示:
& gt& gt& gt請求。得到
{}
& gt& gt& gt請求。郵政
{‘your _ name‘:【‘John Smith‘】,‘bands‘:【‘Beatles‘,‘僵屍‘】}
& gt& gt& gt請求。發布【‘您的姓名‘】
約翰·史密斯
& gt& gt& gt請求。帖子【‘樂隊‘】
僵屍
& gt& gt& gt請求。POST.getlist(“樂隊”)
【“披頭士”、“僵屍”】
& gt& gt& gt請求。post . get(‘妳的名字’,‘阿德裏安’)
約翰·史密斯
& gt& gt& gt請求。post . get(‘不存在的字段‘,‘無處可去的人‘)
“無依之人”
使用時請註意:
Get、post、cookies、files、meta、request、raw _ post _ data和user都延遲加載。也就是說,Django不會花費資源來計算這些屬性值,除非在代碼中訪問它們。