python request屬性及方法說明

if  request.REQUEST.has_key('鍵值'):django

HttpRequest對象的屬性安全

參考:服務器

 

表 H-1. HttpRequest對象的屬性cookie

屬      性session

描述app

pathpost

表示提交請求頁面完整地址的字符串,不包括域名,如"/music/bands/the_beatles/"。編碼

methodurl

表示提交請求使用的HTTP方法。它老是大寫的。例如:spa

if request.method == 'GET':

    do_something()

elif request.method == 'POST':

    do_something_else()

GET

一個類字典對象,包含全部的HTTP的GET參數的信息。見 QueryDict文檔。

POST

一個類字典對象,包含全部的HTTP的POST參數的信息。見 QueryDict文檔。

經過POST提交的請求有可能包含一個空的 POST字典,也就是說, 一個經過POST方法提交的表單可能不包含數據。所以,不該該使用ifrequest.POST 來判斷POST方法的使用,而是使用 if request.method == "POST" (見表中的 method 條目)。

注意: POST 並不 包含文件上傳信息。見 FILES。

REQUEST

爲了方便而建立,這是一個類字典對象,先搜索 POST ,再搜索 GET 。 靈感來自於PHP的 $_REQEUST 。

例如, 若 GET = {"name": "john"}, POST = {"age": '34'} ,REQUEST["name"] 會是 "john" , REQUEST["age"] 會是 "34" 。

強烈建議使用 GET 和 POST,而不是 REQUEST 。這是爲了向前兼容和更清楚的表示。

COOKIES

一個標準的Python字典,包含全部cookie。鍵和值都是字符串。cookie使用的更多信息見第12章。

FILES

一個類字典對象,包含全部上傳的文件。 FILES 的鍵來自 <input type="file" name="" /> 中的 name。 FILES 的值是一個標準的Python字典,包含如下三個鍵:

filename :字符串,表示上傳文件的文件名。

content-type :上傳文件的內容類型。

content :上傳文件的原始內容。

注意 FILES 只在請求的方法是 POST,而且提交的 <form> 包含enctype="multipart/form-data"時才包含數據。不然, FILES 只是一個空的類字典對象。

META

一個標準的Python字典,包含全部有效的HTTP頭信息。有效的頭信息與客戶端和服務器有關。這裏有幾個例子:

CONTENT_LENGTH: 指定包含於請求或響應中數據的字節長度。

CONTENT_TYPE:標明發送或者接收的實體的MIME類型。

QUERY_STRING :未解析的原始請求字符串。

REMOTE_ADDR :客戶端IP地址。

REMOTE_HOST :客戶端主機名。

SERVER_NAME :服務器主機名。

SERVER_PORT :服務器端口號。

在 META 中有效的任一HTTP頭信息都是帶有 HTTP_前綴的鍵,例如:

HTTP_ACCEPT_ENCODING :定義客戶端能夠理解的編碼機制。

HTTP_ACCEPT_LANGUAGE :定義客戶端樂於接受的天然語言列表。

HTTP_HOST :客戶端發送的 Host 頭信息。

HTTP_REFERER :被指向的頁面,若是存在的。

HTTP_USER_AGENT :客戶端的user-agent字符串。

HTTP_X_BENDER : X-Bender 頭信息的值,若是已設的話。

user

一個 django.contrib.auth.models.User 對象表示當前登陸用戶。 若當前用戶還沒有登陸, user 會設爲 django.contrib.auth.models.AnonymousUser 的一個實例。能夠將它們與 is_authenticated() 區別開:

if request.user.is_authenticated():

    # Do something for logged-in users.

else:

    # Do something for anonymous users.

user 僅當Django激活 AuthenticationMiddleware時有效。

關於認證和用戶的完整細節,見第12章。

session

一個可讀寫的類字典對象,表示當前session。僅當Django已激活session支持時有效。見第12章。

raw_post_data

POST的原始數據。 用於對數據的複雜處理。

Request對象一樣包含了一些有用的方法,見表H-2。

表 H-2. HttpRequest 的方法

方法

描述

__getitem__(key)

請求所給鍵的GET/POST值,先查找POST,而後是GET。若鍵不存在,則引起異常 KeyError。

該方法使用戶能夠以訪問字典的方式來訪問一個 HttpRequest實例。

例如, request["foo"] 和先檢查 request.POST["foo"] 再檢查request.GET["foo"] 同樣。

has_key()

返回 True 或 False,標識 request.GET 或 request.POST 是否包含所給的鍵。

get_full_path()

返回 path ,若請求字符串有效,則附加於其後。例如,"/music/bands/the_beatles/?print=true"。

is_secure()

若是請求是安全的,則返回 True 。也就是說,請求是以HTTPS的形式提交的。

QueryDict 對象在一個 HttpRequest 對象中, GET和POST屬性都是 django.http.QueryDict 的實例. QueryDict 是一個相似字典的類,被設計成能夠處理同一個鍵有多個值的狀況.這是很必要的,由於有些 HTML 表單元素,特別是``<select multiple="multiple">``,使用一個鍵來傳遞多個值QueryDict 實例是不可變對象,除非你建立他們的一個拷貝.這意味着你不能直接改變 request.POST 和 request.GET 的值.QueryDict 實現了全部的標準字典方法,由於它就是 dictionary 的一個子類.下文中對與標準字典不一致的地方作了標註:        __getitem__(key) -- 返加給定鍵的值. 若是該鍵有多個值, __getitem__ 返回最後一個值.        __setitem__(key, value) -- 將 key 的值設置爲 [value] (一個Python 列表,只有一個元素 value).注意,這個方法象其它字典方法一個擁有反作用,只能被一個可變的 QueryDict 對象調用.(一個經過`` copy()``建立的副本).        __contains__(key) -- 若是給定鍵存在,返回 True. 它容許你這麼幹: if "foo" in request.GET.        get(key, default) --相似 __getitem__() ,若是該鍵不存在,返回一個默認值.        has_key(key)        setdefault(key, default) -- 相似標準字典的 setdefault(),不一樣之處在於它內部使用的是 __setitem__().        update(other_dict) -- 相似標準字典的 update(), 惟一的不一樣是它將 other_dict 的元素追加到(而不是替換到)當前字典中. 示例:        >>> q = QueryDict('a=1')        >>> q = q.copy() # to make it mutable        >>> q.update({'a': '2'})        >>> q.getlist('a')        ['1', '2']        >>> q['a'] # returns the last        ['2']        items() -- 相似標準字典的 items() 方法, 相似 __getitem__() 的邏輯,它使用最後一個值. 示例:        >>> q = QueryDict('a=1&a=2&a=3')        >>> q.items()        [('a', '3')]        values() -- 相似標準字典的 values() 方法,相似 __getitem__() 的邏輯,它使用最後一個值.示例:        >>> q = QueryDict('a=1&a=2&a=3')        >>> q.values()        ['3']除了這些以外,``QueryDict`` 還擁有下列方法:        copy() -- 返回當前對象的一個拷貝,它使用標準庫中的 深拷貝 方法. 這個拷貝是可變的,也就是說你能夠改變這個拷貝的值.        getlist(key) -- 以一個Python列表的形式返回指定鍵的值.若該鍵不存在,返回一個空的列表.該列表是以某種方式排序的.        setlist(key, list_) -- 不一樣於 __setitem__() ,將給定的鍵的值設置爲一個列表.        appendlist(key, item) -- 將給定鍵對應的值(別忘了,它是一個列表)追加一個 item.        setlistdefault(key, default_list) -- 就象 setdefault ,不過它接受一個列表做爲值而不是一個單一的值.        lists() -- 就象 items(),不過它包含全部的值(以列表的方式):        >>> q = QueryDict('a=1&a=2&a=3')        >>> q.lists()        [('a', ['1', '2', '3'])]        urlencode() -- 以一個查詢字符串的形式返回一個字符串. Example: "a=2&b=3&b=5".

相關文章
相關標籤/搜索