视图中,用户发送的get与post请求数据,都被封装为QueryDict对象了
认识一下QueryDict对象
该对象类似于一个字典
QueryDict源码
class QueryDict(MultiValueDict):
"""
A specialized MultiValueDict which represents a query string.
A QueryDict can be used to represent GET or POST data. It subclasses
MultiValueDict since keys in such data can be repeated, for instance
in the data from a form with a <select multiple> field.
By default QueryDicts are immutable, though the copy() method
will always return a mutable copy.
Both keys and values set on this class are converted from the given encoding
(DEFAULT_CHARSET by default) to str.
"""
# These are both reset in __init__, but is specified here at the class
# level so that unpickling will have valid values
_mutable = True
_encoding = None
def __init__(self, query_string=None, mutable=False, encoding=None):
super().__init__()
self.encoding = encoding or settings.DEFAULT_CHARSET
query_string = query_string or ''
parse_qsl_kwargs = {
'keep_blank_values': True,
'fields_limit': settings.DATA_UPLOAD_MAX_NUMBER_FIELDS,
'encoding': self.encoding,
}
if isinstance(query_string, bytes):
# query_string normally contains URL-encoded data, a subset of ASCII.
try:
query_string = query_string.decode(self.encoding)
except UnicodeDecodeError:
# ... but some user agents are misbehaving :-(
query_string = query_string.decode('iso-8859-1')
for key, value in limited_parse_qsl(query_string, **parse_qsl_kwargs):
self.appendlist(key, value)
self._mutable = mutable
注释的翻译
一种表示查询字符串的专用多值专家。
querydict可用于表示get或post数据。IT子类
例如,由于这些数据中的键可以重复,所以多值医学
在表单的数据中有一个字段。
默认情况下,querydict是不可变的,尽管copy()方法
将始终返回可变副本。
此类上设置的键和值都是从给定的编码转换而来的
(默认字符集)到str。
QueryDict类创建的对象
》实例化QueryDict的时候,传参注意
参数格式类似于get请求的格式
QueryDict与字典的相似之处
》取值,两种方式
字典【键】
字典.get(键)
》取的值不存在时
字典【键】,会报错
字典.get(键),不报错,返回一个None
也可以设置一个默认的返回值
这些用法同python字典一模一样
QueryDict与字典不同之处
》关注键对应的值
关注,name键对应的值,好像是列表
然而,取值的时候,拿到的却不是列表
》字典的一个键只对应一个值
如果再次给键值,覆盖操作
》QueryDict字典的一个键可以有多个值
取值的时候,会得到键所对应的列表里,最未位的数据
当前a键对应的列表,最未位值为 ‘3’
》要获取键所对应的完整的列表
QueryDict对象.getlist(键)
》什么情况下需要取出这样的列表?
我们提交多选框的数据时,就会一次传过去多个数据
试一试,checkbox多选的传参,看看get请求的结果
最后
QueryDict的特性理解后
对于视图中的
request.GET
request.POST
等等类型的操作,就可以更清晰了