在一個 HttpRequest 對象中, GET 和 POST 屬性都是 django.http.QueryDict 的實例。 QueryDict 是一個類似於字典的類,專門用來處理用一個鍵的多值。當處理一些HTML表單中的元素,特別是 <select multiple="multiple"> 之類傳遞同一key的多值的元素時,就需要這個類了。
QueryDict 實例是不可變的,除非創建了一個 copy() 副本。也就是說不能直接更改 request.POST 和 request.GET 的屬性。
QueryDict 實現了所有標准的字典的方法,因為它正是字典的一個子類。與其不同的東西已在下表中列出。
| QueryDicts 與標准字典的區別 |
|
| 方法 |
與標准字典實現的不同 |
| __getitem__ |
與一個字典一樣。但是,當一個鍵有多個值時, __getitem__() 返回最后一個值。 |
| __setitem__ |
將所給鍵的值設為 [value] (一個只有一個 value 元素的 Python列表)。 注意,因對其它的字典函數有副作用,故它只能被稱為一個可變的 QueryDict (通過 copy() 創建)。 |
| get() |
如果一個鍵多個值,和 __getitem__ 一樣, get() 返回最后一個值。 |
| update() |
參數是一個 QueryDict 或標准字典。 和標准字典的 update 不同,這個方法*增加*而不是替換一項內容: >>> q = QueryDict('a=1') >>> q = q.copy() # 使其可變 >>> q.update({'a': '2'}) >>> q.getlist('a') ['1', '2'] >>> q['a'] # 返回最后一個值 ['2'] |
| items() |
和標准字典的 items() 方法一樣, 不同的是它和 __getitem()__ 一樣,返回最后一個值: >>> q = QueryDict('a=1&a=2&a=3') >>> q.items() [('a', '3')] |
| values() |
和標准字典的 values() 方法一樣, 不同的是它和 __getitem()__ 一樣,返回最后一個值。 |
| 附加的 (非字典的) QueryDict 方法 |
|
| 方法 |
描述 |
| copy() |
返回一個對象的副本,使用的是Python標准庫中的 copy.deepcopy() 。 該副本是可變的,也就是說,你能改變它的值。 |
| getlist(key) |
以Python列表的形式返回所請求鍵的數據。若鍵不存在則返回空列表。它保證了一定會返回某種形式的list。 |
| setlist(key, list_) |
將所給鍵的鍵值設為 list_ (與 __setitem__() 不同)。 |
| appendlist(key, item) |
在 key 相關的list上增加 item 。 |
| setlistdefault(key, l) |
和 setdefault 一樣, 不同的是它的第二個參數是一個列表,而不是一個值。 |
| lists() |
和 items() 一樣, 不同的是它以一個列表的形式返回字典每一個成員的所有值。 例如: >>> q = QueryDict('a=1&a=2&a=3') >>> q.lists() [('a', ['1', '2', '3'])] |
| urlencode() |
返回一個請求字符串格式的數據字符串(如, "a=2&b=3&b=5" )。
|
