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/