原文:https://www.cnblogs.com/scolia/p/5634591.html

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

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

  .copy()方法。

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

1.QueryDict.__init__(query_string=None, mutable=False, encoding=None)

  这是一个构造函数,其中 query_string 需要一个字符串,例如:

>>> QueryDict('a=1&a=2&c=3')
<QueryDict: {'a': ['1', '2'], 'c': ['3']}>

 

  如果 query_string 没有传入,则获得一个空的对象。

  你所遇到的 QueryDict 对象,特别是 request.POST 和 request.GET 得到的。如果你想自己实例化一个对象,可以传递 mutable=True 使你所实例化的对象可变。当然 request.POST 和 request.GET 是django创建的,也就是说除非改 django 源码,否则它们是不可变的。

  对于设置的键和值,会从 encoding 转码成 Unicode。也就是说,如果传入的字符串 query_string  是 GBK 或者是 utf-8 的编码,将会自动转码成 Unicode,然后用做字典的键和值。如果 encoding = None,也就是没有设定的话,将使用 DEFAULT_CHARSET 的值,默认为:'utf-8'。

2.QueryDict.__getitem__(key)

  KeyError。) 

 

3.QueryDict.__setitem__(key, value)

  设置给出的 key 的值为[value](一个Python 列表,只有一个元素 value)。注意:只有对象是可以改变的时候才能使用,例如通过 .copy() 方法创建的对象。

 

4.QueryDict.__contains__(key)

  

 

5.QueryDict.get(key, default)

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

 

6.QueryDict.setdefault(key, default)

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

 

7.QueryDict.update(other_dict)

  update() 方法,但是它附加到当前字典项的后面,而不是替换掉它们。

例如:

12-django-QueryDict 对象
>>> q = QueryDict('a=1', mutable=True)    # 当然要可变的才能使用
>>> q.update({'a': '2'})
>>> q.getlist('a')
['1', '2']
>>> q['a'] # returns the last
['2']
12-django-QueryDict 对象

 

 

8.QueryDict.items()

  类似标准字典的items() 方法,返回一个由键值组成的元祖的列表。但是它使用的是和__getitem__ 一样返回最新的值的逻辑。

例如:

>>> q = QueryDict('a=1&a=2&a=3')
>>> q.items()
[('a', '3')]

 

 

9.QueryDict.iteritems()

  QueryDict.__getitem__() 一样的返回最新的值的逻辑。

 

10.QueryDict.iterlists()

  类似QueryDict.iteritems(),返回一个包含键值对的元祖(key, value)迭代对象 ,value 是一个包括所有 key 的值的列表。

 

11.QueryDict.values()

  __getitem__ 一样返回最新的值的逻辑。也就是返回一个所有键对应的最新值的列表。

例如:

>>> q = QueryDict('a=1&a=2&a=3')
>>> q.values()
['3']

 

 

12.QueryDict.itervalues()

  类似QueryDict.values(),只是它返回的是一个迭代器。

 

13.QueryDict.copy()

  此副本是可变的即使原始对象是不可变的。

 

14.QueryDict.getlist(key, default)

  它保证返回的是某种类型的列表,除非默认值不是列表。

 

15.QueryDict.setlist(key, list_)

  为给定的键设置list_(与__setitem__() 不同),可以设置一个多元素的列表。

 

16.QueryDict.appendlist(key, item)

  将项追加到内部与键相关联的列表中。

 

17.QueryDict.setlistdefault(key, default_list)

  类似setdefault,除了它接受一个列表而不是单个值。

 

18.QueryDict.lists()

  items,只是它将字典中的每个成员作为列表。也就是说,列表中的每个元素,都是由键和对应的值列表组成的二元元祖。

例如:

>>> q = QueryDict('a=1&a=2&a=3')
>>> q.lists()
[('a', ['1', '2', '3'])]

 

 

19.QueryDict.pop(key)

  KeyError

例如 ︰

>>> q = QueryDict('a=1&a=2&a=3', mutable=True)
>>> q.pop('a')
['1', '2', '3']

 

 

20.QueryDict.popitem()

  KeyError

例如 ︰

>>> q = QueryDict('a=1&a=2&a=3', mutable=True)
>>> q.popitem()
('a', ['1', '2', '3'])

 

 

21.QueryDict.dict()

  QueryDict.__getitem__()相同的逻辑,也就是最新的:

>>> q = QueryDict('a=1&a=3&a=5')
>>> q.dict()
{'a': '5'}

 

 

22.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/'

 

 

 
 

原文:https://www.cnblogs.com/scolia/p/5634591.html

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

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

  .copy()方法。

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

1.QueryDict.__init__(query_string=None, mutable=False, encoding=None)

  这是一个构造函数,其中 query_string 需要一个字符串,例如:

>>> QueryDict('a=1&a=2&c=3')
<QueryDict: {'a': ['1', '2'], 'c': ['3']}>

 

  如果 query_string 没有传入,则获得一个空的对象。

  你所遇到的 QueryDict 对象,特别是 request.POST 和 request.GET 得到的。如果你想自己实例化一个对象,可以传递 mutable=True 使你所实例化的对象可变。当然 request.POST 和 request.GET 是django创建的,也就是说除非改 django 源码,否则它们是不可变的。

  对于设置的键和值,会从 encoding 转码成 Unicode。也就是说,如果传入的字符串 query_string  是 GBK 或者是 utf-8 的编码,将会自动转码成 Unicode,然后用做字典的键和值。如果 encoding = None,也就是没有设定的话,将使用 DEFAULT_CHARSET 的值,默认为:'utf-8'。

2.QueryDict.__getitem__(key)

  KeyError。) 

 

3.QueryDict.__setitem__(key, value)

  设置给出的 key 的值为[value](一个Python 列表,只有一个元素 value)。注意:只有对象是可以改变的时候才能使用,例如通过 .copy() 方法创建的对象。

 

4.QueryDict.__contains__(key)

  

 

5.QueryDict.get(key, default)

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

 

6.QueryDict.setdefault(key, default)

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

 

7.QueryDict.update(other_dict)

  update() 方法,但是它附加到当前字典项的后面,而不是替换掉它们。

例如:

12-django-QueryDict 对象
>>> q = QueryDict('a=1', mutable=True)    # 当然要可变的才能使用
>>> q.update({'a': '2'})
>>> q.getlist('a')
['1', '2']
>>> q['a'] # returns the last
['2']
12-django-QueryDict 对象

 

 

8.QueryDict.items()

  类似标准字典的items() 方法,返回一个由键值组成的元祖的列表。但是它使用的是和__getitem__ 一样返回最新的值的逻辑。

例如:

>>> q = QueryDict('a=1&a=2&a=3')
>>> q.items()
[('a', '3')]

 

 

9.QueryDict.iteritems()

  QueryDict.__getitem__() 一样的返回最新的值的逻辑。

 

10.QueryDict.iterlists()

  类似QueryDict.iteritems(),返回一个包含键值对的元祖(key, value)迭代对象 ,value 是一个包括所有 key 的值的列表。

 

11.QueryDict.values()

  __getitem__ 一样返回最新的值的逻辑。也就是返回一个所有键对应的最新值的列表。

例如:

>>> q = QueryDict('a=1&a=2&a=3')
>>> q.values()
['3']

 

 

12.QueryDict.itervalues()

  类似QueryDict.values(),只是它返回的是一个迭代器。

 

13.QueryDict.copy()

  此副本是可变的即使原始对象是不可变的。

 

14.QueryDict.getlist(key, default)

  它保证返回的是某种类型的列表,除非默认值不是列表。

 

15.QueryDict.setlist(key, list_)

  为给定的键设置list_(与__setitem__() 不同),可以设置一个多元素的列表。

 

16.QueryDict.appendlist(key, item)

  将项追加到内部与键相关联的列表中。

 

17.QueryDict.setlistdefault(key, default_list)

  类似setdefault,除了它接受一个列表而不是单个值。

 

18.QueryDict.lists()

  items,只是它将字典中的每个成员作为列表。也就是说,列表中的每个元素,都是由键和对应的值列表组成的二元元祖。

例如:

>>> q = QueryDict('a=1&a=2&a=3')
>>> q.lists()
[('a', ['1', '2', '3'])]

 

 

19.QueryDict.pop(key)

  KeyError

例如 ︰

>>> q = QueryDict('a=1&a=2&a=3', mutable=True)
>>> q.pop('a')
['1', '2', '3']

 

 

20.QueryDict.popitem()

  KeyError

例如 ︰

>>> q = QueryDict('a=1&a=2&a=3', mutable=True)
>>> q.popitem()
('a', ['1', '2', '3'])

 

 

21.QueryDict.dict()

  QueryDict.__getitem__()相同的逻辑,也就是最新的:

>>> q = QueryDict('a=1&a=3&a=5')
>>> q.dict()
{'a': '5'}

 

 

22.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/'

 

 

相关文章:

  • 2021-11-09
  • 2022-12-23
  • 2021-05-19
  • 2022-12-23
  • 2021-09-01
  • 2021-09-30
  • 2021-11-14
  • 2021-06-21
猜你喜欢
  • 2021-12-31
  • 2022-02-04
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案