Django QueryDict

Django 的 QueryDict 对象是由 request.GET 创建的,请求的所有内容均包含在 QueryDict 当中, QueryDict 可以用来表示 GET 和 POST 的数据
QueryDict 是 MultiValueDict 的子类,为了处理请求中一个 key 对应多个 value 的情况,如多选框中的字段
MultiValueDict <- 点击查看

QueryDict 默认无法修改,可以通过 .copy() 获取可修改的副本
导入:

from django.http.request import QueryDict

方法

__init__

构造函数:

def __init__(self, query_string=None, mutable=False, encoding=None)

默认生成的 QueryDict 是无法更改的,需要修改 mutable 参数
可以通过传入一个字符串来实例化 QueryDict
示例:

str_ = 'a=1&a=2&b=1'
a = QueryDict(str_, encoding='utf-8')
print(a)

输出结果:

<QueryDict: {'a': ['1', '2'], 'b': ['1']}>

fromkeys

fromkeys 可以通过一个可迭代对象创建 QueryDict 对象,他会将可迭代对象中的内容作为 key,传入指定 value 后调用 appendlist

def fromkeys(cls, iterable, value='', mutable=False, encoding=None)

示例:

a = QueryDict.fromkeys(['a', 'b'], 1)
print(a)

输出结果:

<QueryDict: {'a': [1], 'b': [1]}>

setlist & appendlist

setlist 用于设置一个 key 对应的 value 列表,如果 key 已经存在则替换原来的 value 列表,如果不存在则创建新的键值对

def setlist(self, key, list_)

appendlist 用于向一个 value 列表中增加新的值,如果 key 已经存在则将新值添加到原 value 列表的后面,如果不存在则创建一个空列表后再将新值填入

def appendlist(self, key, value)

示例:

str_ = 'a=1&a=2&b=1'
a = QueryDict(str_, encoding='utf-8', mutable=True)
print(a)
a.setlist('a', ['2', '3'])
print(a)
a.appendlist('a', '2')
a.appendlist('c', '2')
print(a)

输出结果:

<QueryDict: {'a': ['1', '2'], 'b': ['1']}>
<QueryDict: {'a': ['2', '3'], 'b': ['1']}>
<QueryDict: {'a': ['2', '3', '2'], 'b': ['1'], 'c': ['2']}>

setdefault & setlistdefault

setdefault 和 setlistdefault 都是用来初始化键值对的:如果对应 key 不存在则创建,存在则跳过

def setdefault(self, key, default=None)
def setlistdefault(self, key, default_list=None)

setdefault 用于设置一个值,默认为 [None]
setlistdefault 用于设置一个列表,默认为 []default= 只能设置为可迭代对象,它会被转换为 list 之后(list())用于初始化一个键值对
示例:

str_ = 'a=1&a=2&b=1'
a = QueryDict(str_, encoding='utf-8', mutable=True)
a.setdefault('b', '123')
a.setdefault('c')
a.setlistdefault('d', '123')
a.setlistdefault('e', {'a': '1', 'b': '2'})
print(a)

输出结果:

<QueryDict: {'a': ['1', '2'], 'b': ['1'], 'c': [None], 'd': ['1', '2', '3'], 'e': ['a', 'b']}>

pop & popitem

pop 和 popitem 都会从字典中取出一个键值对并删除

def pop(self, key, *args)
def popitem(self)

pop 可以指定删除键值对的 key,如果没有找到对应的 key 会报错,除非传入一个默认返回值
popitem 不能指定要删除键值对的 key,删除的是最后一个加入的键值对,如果字典为空会报错
示例:

str_ = 'a=1&a=2&b=1&c=1&d=1'
a = QueryDict(str_, encoding='utf-8', mutable=True)
a.pop('a')
print(a)
print(a.pop('f', 'cannot find the key'))
print(a.popitem())
print(a)

输出结果:

<QueryDict: {'a': ['1', '2'], 'b': ['1'], 'c': ['1'], 'd': ['1']}>
cannot find the key
('d', ['1'])
<QueryDict: {'b': ['1'], 'c': ['1']}>

clear

clear 会清空字典中的所有内容

urlencode

通过 urlencode 可以将 QueryDict 转换成 url 字符串
示例:

str_ = 'a=a&b=b/'
a = QueryDict(str_, encoding='utf-8', mutable=True)
print(a)
print(a.urlencode())
print(a.urlencode(safe='/'))

输出结果:

<QueryDict: {'a': ['a'], 'b': ['b/']}>
a=a&b=b%2F <class 'str'>
a=a&b=b/

posted on 2020-08-19 17:51  doubtful  阅读(396)  评论(2编辑  收藏  举报

导航