django-QueryDict对象

发布时间:2026/7/28 18:18:09
django-QueryDict对象 视图中用户发送的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_stringNone, mutableFalse, encodingNone): 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.GETrequest.POST等等类型的操作就可以更清晰了