django的QueryDict 对象

在 HttpRequest 对象中,属性 GET 和 POST 得到的都是 django.http.QueryDict 所创建的实例。这是一个 django 自定义的类似字典的类,用来处理同一个键带多个值的情况。

在 python 原始的字典中,当一个键出现多个值的时候会发生冲突,只保留最后一个值。而在 HTML 表单中,通常会发生一个键有多个值的情况,例如 (多选框)就是一个很常见情况。

request.POST 和request.GET 的QueryDict 在一个正常的请求/响应循环中是不可变的。若要获得可变的版本,需要使用.copy()方法。

下面我们来看这个类中有什么方法:

  1. QueryDict.__init__(query_string=None, mutable=False, encoding=None)
>>> QueryDict('a=1&a=2&c=3')
<QueryDict: {'a': ['1', '2'], 'c': ['3']}>
  1. QueryDict.__getitem__(key)
    返回给出的 key 的值。如果key 具有多个值,getitem() 返回最后(最新)的值。如果 key 不存在,则引发django.utils.datastructures.MultiValueDictKeyError。(它是Python 标准KeyError 的一个子类,所以你仍然可以坚持捕获KeyError。)

  2. .QueryDict.__setitem__(key, value)
    如果给出的key 已经设置,则返回True。它让你可以做 if “foo” in request.GET 这样的操作。

  3. QueryDict.__contains__(key)
    如果给出的key 已经设置,则返回True。它让你可以做 if “foo” in request.GET 这样的操作。

  4. QueryDict.get(key, default)
    使用与上面__getitem__() 相同的逻辑,但是当key 不存在时返回一个默认值。

  5. QueryDict.setdefault(key, default)
    类似标准字典的setdefault() 方法,只是它在内部使用的是__setitem__()。也就是说,当key已经存在时,返回其值,key不存在时,返回default,同时添加 key 和 default到对象中。

  6. QueryDict.update(other_dict)
    接收一个QueryDict 或标准字典。类似标准字典的update() 方法,但是它附加到当前字典项的后面,而不是替换掉它们。例如:

>>> q = QueryDict('a=1', mutable=True)    # 当然要可变的才能使用
>>> q.update({'a': '2'})
>>> q.getlist('a')
['1', '2']
>>> q['a'] # returns the last
['2']
  1. QueryDict.items()
>>> q = QueryDict('a=1&a=2&a=3')
>>> q.items()
[('a', '3')]
  1. QueryDict.iteritems()
    类似标准字典的iteritems() 方法,返回一个迭代对象。类似 QueryDict.items(),它使用的是和QueryDict.getitem() 一样的返回最新的值的逻辑。
  2. QueryDict.iterlists()
    类似QueryDict.iteritems(),返回一个包含键值对的元祖(key, value)迭代对象 ,value 是一个包括所有 key 的值的列表。
  3. QueryDict.values()
    类似标准字典的values() 方法,但是它使用的是和__getitem__ 一样返回最新的值的逻辑。也就是返回一个所有键对应的最新值的列表。例如:
>>> q = QueryDict('a=1&a=2&a=3')
>>> q.values()
['3']
  1. QueryDict.itervalues()
    类似QueryDict.values(),只是它返回的是一个迭代器。
  2. QueryDict.copy()
    返回对象的副本,使用Python 标准库中的copy.deepcopy()。此副本是可变的即使原始对象是不可变的。
  3. QueryDict.getlist(key, default)
    以Python 列表形式返回所请求的键的数据。如果键不存在并且没有提供默认值,则返回空列表。它保证返回的是某种类型的列表,除非默认值不是列表。
  4. QueryDict.setlist(key, list_)
    为给定的键设置list_(与__setitem__() 不同),可以设置一个多元素的列表。
  5. QueryDict.appendlist(key, item)
    将项追加到内部与键相关联的列表中。
  6. QueryDict.setlistdefault(key, default_list)
    类似setdefault,除了它接受一个列表而不是单个值。
  7. QueryDict.lists()
    类似items,只是它将字典中的每个成员作为列表。也就是说,列表中的每个元素,都是由键和对应的值列表组成的二元元祖。例如:
>>> q = QueryDict('a=1&a=2&a=3')
>>> q.lists()
[('a', ['1', '2', '3'])]
  1. QueryDict.pop(key)
    返回给定键的值的列表,并从字典中移除它们。如果键不存在,将引发KeyError。例如 ︰
>>> q = QueryDict('a=1&a=2&a=3', mutable=True)
>>> q.pop('a')
['1', '2', '3']
  1. QueryDict.popitem()
    删除字典任意一个成员(因为没有顺序的概念),并返回二值元组,包含键和键的所有值的列表。在一个空的字典上调用时将引发KeyError。例如 ︰
>>> q = QueryDict('a=1&a=2&a=3', mutable=True)
>>> q.popitem()
('a', ['1', '2', '3'])
  1. QueryDict.dict()
    返回QueryDict 的dict 表示形式。对于QueryDict 中的每个(key, list)对 ,dict 将有(key, item) 对,其中item 是列表中的一个元素,使用与QueryDict.getitem()相同的逻辑,也就是最新的:
>>> q = QueryDict('a=1&a=3&a=5')
>>> q.dict()
{'a': '5'}
  1. QueryDict.urlencode([safe])
    从数据中返回查询字符串格式。例如:
>>> q = QueryDict('a=2&b=3&b=5')
>>> q.urlencode()
'a=2&b=3&b=5'

可选地,urlencode 可以传递不需要编码的字符。(这意味着要进行 url 编码),例如︰

>>> q = QueryDict(mutable=True)
>>> q['next'] = '/a&b/'
>>> q.urlencode(safe='/')
'next=/a%26b/'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值