- QueryDIct对象
在HttpRequest 对象中,GET 和POST 属性是django.http.QueryDict 的实例,它是一个自 定义的类似字典的类,用来处理同一个键带有多个值。这个类的需求来自某些HTML 表单 元素传递多个值给同一个键 request.POST 和request.GET 的QueryDict 在一个正常的请求/响应循环中是不可变的。若 要获得可变的版本,需要使用.copy()。
- 实例化QueryDict
QueryDict.__init__(query_string=None, mutable=False, encoding=None)
- 示例
>>> QueryDict('a=1&a=2&c=3') <QueryDict: {'a': ['1', '2'], 'c': ['3']}>
- 通过fromkeys实例化QueryDict (1.11新增)
classmethod QueryDict.fromkeys(iterable, value=”, mutable=False, encoding=None)
- 示例
>>> QueryDict.fromkeys(['a', 'a', 'b'], value='val') <QueryDict: {'a': ['val', 'val'], 'b': ['val']}>
- QueryDict方法
QueryDict.get(key, default=None) #有多个值的话只能取最后一个,可以通过getlist取 QueryDict.setdefault(key, default=None)[source] QueryDict.update(other_dict) QueryDict.items() QueryDict.values()#用values提取数据有多个值的话会丢失数据 QueryDict.copy() QueryDict.getlist(key, default=None) QueryDict.setlist(key, list_)[source] QueryDict.appendlist(key, item) QueryDict.setlistdefault(key, default_list=None) QueryDict.lists() QueryDict.pop(key) QueryDict.popitem() QueryDict.dict() 转换成字典多个值会丢参数 QueryDict.urlencode(safe=None) #转换成url格式字符串
- ipython演示
执行下面命令进入ipython交互界面
python manage.py shell
In [1]: from django.http import QueryDict In [2]: GET=QueryDict("a=1&b=2&b=3") In [3]: GET Out[3]: <QueryDict: {'a': ['1'], 'b': ['2', '3']}> #返回结果和浏览器中传入参数?a=1&b=2&b=3类似
- 取值
In [1]: from django.http import QueryDict In [2]: GET=QueryDict("a=1&b=2&b=3") In [3]: GET Out[3]: <QueryDict: {'a': ['1'], 'b': ['2', '3']}> In [4]: GET.get('a') Out[4]: '1' In [5]: GET.get('b') Out[5]: '3' In [6]: GET.getlist('b') Out[6]: ['2', '3'] In [7]: GET.values() Out[7]: <generator object MultiValueDict.values at 0x7fd2420f6eb8> In [9]: [k for k in GET.values()] Out[9]: ['1', '3'] In [10]: GET.urlencode() Out[10]: 'a=1&b=2&b=3'