在一个 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" )。
|