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方法的使用,而是if 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__(關鍵字)
請求給定鍵的GET/POST值,首先查找POST,然後是GET。如果該鍵不存在,將引發異常KeyError。
該方法使用戶能夠通過訪問字典來訪問HttpRequest的實例。
例如,request["foo"]與checking request相同。在檢查請求之前發布["foo"]。GET["foo"]。
Has_key()返回True或False,指示是否請求。獲取或請求。POST包含給定的鍵。
Get_full_path()返回path,如果請求字符串有效,則追加到它後面。比如“/音樂/樂隊/the _ beats/?print=true .
如果請求是安全的,Is_secure()返回True。換言之,請求是以HTTPS的形式提交的。
QueryDict對象
在HttpRequest對象中,GET和POST屬性都是django.http.QueryDict QueryDict是壹個類似於字典的類,專門用來處理壹鍵多值。當處理壹些HTML表單中的元素時,尤其是
翻譯....
除非創建了copy()副本,否則QueryDict實例是不可變的。也就是說,請求的屬性。發布和請求。GET不能直接更改。
QueryDict實現了所有標準的字典方法,因為它是字典的子類。與它不同的壹切都已列在表H-3中。
表H-3。查詢詞典和標準詞典的區別
方法
不同於標準詞典。
__getitem__與字典相同。但是,當壹個鍵有多個值時,__getitem__()返回最後壹個值。
__setitem__將給定鍵的值設置為[value](只有壹個value元素的Python列表)。註意,它只能被稱為變量QueryDict(由copy()創建),因為它對其他字典函數有副作用。
Get()如果壹個鍵有多個值,比如__getitem__,get()返回最後壹個值。
更新()
該參數是查詢字典或標準字典。和標準詞典
更新就不同了,這個方法*增加*而不是替換壹個內容:
& gt& gt& gtq = QueryDict('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& gtq.items()
[('a ',' 3')]
Values()與標準字典中的values()方法相同,只是它像__getitem()__壹樣返回最後壹個值。
此外,QueryDict具有表H-4中列出的方法。
表H-4。其他(非字典)查詢方法
方法
形容
Copy()使用Python標準庫中的copy.deepcopy()返回對象的副本。副本是可變的,也就是說,您可以更改它的值。
Getlist(key)以Python列表的形式返回所請求的鍵的數據。如果該鍵不存在,則返回壹個空列表。它保證將返回某種形式的列表。
Setlist(key,list_)將給定鍵的鍵值設置為list_(不同於__setitem__())。
Appendlist(key,item)將項目添加到與key相關的列表中。
Setlistdefault(key,l)與setdefault相同,只是它的第二個參數是列表而不是值。
列表()
與items()壹樣,不同之處在於它以列表的形式返回字典中每個成員的所有值。例如:
& gt& gt& gtq = query dict(' a = 1 & amp;a = 2 & ampa = 3’)
& gt& gt& gtq.lists()
[('a ',['1 ',' 2 ',' 3'])]
Urlencode()返回請求字符串格式的數據字符串(例如,“A = 2 &;b = 3 & ampb=5”).
完整的例子。
例如,給定以下HTML表單:
& ltform action = "/foo/bar/" method = " post " >
& ltinput type = " text " name = " your _ name "/& gt;
& ltselect multiple = " multiple " name = " bands " & gt;
& ltoption value = " beatles " & gt甲殼蟲樂隊& lt/option & gt;
& ltoption value = " who " & gt誰& lt/option & gt;
& ltoption value = " zombies " & gt僵屍& lt/option & gt;
& lt/select & gt;
& ltinput type = " submit "/& gt;
& lt/form & gt;
如果用戶在your_name中輸入“John Smith”,在多選框中選擇了披頭士和僵屍,那麽下面是Django的請求對象所具有的內容:
& gt& gt& gt請求。得到
{}
& gt& gt& gt請求。郵政
{ '您的姓名':['約翰·史密斯'],'樂隊':['披頭士','僵屍']}
& 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不會花費資源去計算這些屬性值,除非是在代碼中訪問。