django-QueryDict 对象
在 HttpRequest 对象中,属性 GET 和 POST 得到的都是 django.http.QueryDict 所创建的实例。这是一个 django 自定义的类似字典的类,用来处理同一个键带多个值的情况。
在 python 原始的字典中,当一个键出现多个值的时候会发生冲突,只保留最后一个值。而在 HTML 表单中,通常会发生一个键有多个值的情况,例如 <select multiple> (多选框)就是一个很常见情况。
request.POST 和request.GET 的QueryDict 在一个正常的请求/响应循环中是不可变的。若要获得可变的版本,需要使用.copy()方法。
下面我们来看这个类中有什么方法:
1.QueryDict.__init__(query_string=None, mutable=False, encoding=None)
这是一个构造函数,其中 query_string 需要一个字符串,例如:
>>> QueryDict('a=1&a=2&c=3')
<QueryDict: {'a': ['', ''], 'c': ['']}>
如果 query_string 没有传入,则获得一个空的对象。
你所遇到的 QueryDict 对象,特别是 request.POST 和 request.GET 得到的。如果你想自己实例化一个对象,可以传递 mutable=True 使你所实例化的对象可变。当然 request.POST 和 request.GET 是django创建的,也就是说除非改 django 源码,否则它们是不可变的。
对于设置的键和值,会从 encoding 转码成 Unicode。也就是说,如果传入的字符串 query_string 是 GBK 或者是 utf-8 的编码,将会自动转码成 Unicode,然后用做字典的键和值。如果 encoding = None,也就是没有设定的话,将使用 DEFAULT_CHARSET 的值,默认为:'utf-8'。
2.QueryDict.__getitem__(key)
返回给出的 key 的值。如果key 具有多个值,__getitem__() 返回最后(最新)的值。如果 key 不存在,则引发django.utils.datastructures.MultiValueDictKeyError。(它是Python 标准KeyError 的一个子类,所以你仍然可以坚持捕获KeyError。)
3.QueryDict.__setitem__(key, value)
设置给出的 key 的值为[value](一个Python 列表,只有一个元素 value)。注意:只有对象是可以改变的时候才能使用,例如通过 .copy() 方法创建的对象。
4.QueryDict.__contains__(key)
如果给出的key 已经设置,则返回True。它让你可以做 if "foo" in request.GET 这样的操作。
5.QueryDict.get(key, default)
使用与上面__getitem__() 相同的逻辑,但是当key 不存在时返回一个默认值。
6.QueryDict.setdefault(key, default)
类似标准字典的setdefault() 方法,只是它在内部使用的是__setitem__()。也就是说,当key已经存在时,返回其值,key不存在时,返回default,同时添加 key 和 default到对象中。
7.QueryDict.update(other_dict)
接收一个QueryDict 或标准字典。类似标准字典的update() 方法,但是它附加到当前字典项的后面,而不是替换掉它们。
例如:
>>> q = QueryDict('a=1', mutable=True) # 当然要可变的才能使用
>>> q.update({'a': ''})
>>> q.getlist('a')
['', '']
>>> q['a'] # returns the last
['']
8.QueryDict.items()
类似标准字典的items() 方法,返回一个由键值组成的元祖的列表。但是它使用的是和__getitem__ 一样返回最新的值的逻辑。
例如:
>>> q = QueryDict('a=1&a=2&a=3')
>>> q.items()
[('a', '')]
9.QueryDict.iteritems()
类似标准字典的iteritems() 方法,返回一个迭代对象。类似 QueryDict.items(),它使用的是和QueryDict.__getitem__() 一样的返回最新的值的逻辑。
10.QueryDict.iterlists()
类似QueryDict.iteritems(),返回一个包含键值对的元祖(key, value)迭代对象 ,value 是一个包括所有 key 的值的列表。
11.QueryDict.values()
类似标准字典的values() 方法,但是它使用的是和__getitem__ 一样返回最新的值的逻辑。也就是返回一个所有键对应的最新值的列表。
例如:
>>> q = QueryDict('a=1&a=2&a=3')
>>> q.values()
['']
12.QueryDict.itervalues()
类似QueryDict.values(),只是它返回的是一个迭代器。
13.QueryDict.copy()
返回对象的副本,使用Python 标准库中的copy.deepcopy()。此副本是可变的即使原始对象是不可变的。
14.QueryDict.getlist(key, default)
以Python 列表形式返回所请求的键的数据。如果键不存在并且没有提供默认值,则返回空列表。它保证返回的是某种类型的列表,除非默认值不是列表。
15.QueryDict.setlist(key, list_)
为给定的键设置list_(与__setitem__() 不同),可以设置一个多元素的列表。
16.QueryDict.appendlist(key, item)
将项追加到内部与键相关联的列表中。
17.QueryDict.setlistdefault(key, default_list)
类似setdefault,除了它接受一个列表而不是单个值。
18.QueryDict.lists()
类似items,只是它将字典中的每个成员作为列表。也就是说,列表中的每个元素,都是由键和对应的值列表组成的二元元祖。
例如:
>>> q = QueryDict('a=1&a=2&a=3')
>>> q.lists()
[('a', ['', '', ''])]
19.QueryDict.pop(key)
返回给定键的值的列表,并从字典中移除它们。如果键不存在,将引发KeyError。
例如 ︰
>>> q = QueryDict('a=1&a=2&a=3', mutable=True)
>>> q.pop('a')
['', '', '']
20.QueryDict.popitem()
删除字典任意一个成员(因为没有顺序的概念),并返回二值元组,包含键和键的所有值的列表。在一个空的字典上调用时将引发KeyError。
例如 ︰
>>> q = QueryDict('a=1&a=2&a=3', mutable=True)
>>> q.popitem()
('a', ['', '', ''])
21.QueryDict.dict()
返回QueryDict 的dict 表示形式。对于QueryDict 中的每个(key, list)对 ,dict 将有(key, item) 对,其中item 是列表中的一个元素,使用与QueryDict.__getitem__()相同的逻辑,也就是最新的:
>>> q = QueryDict('a=1&a=3&a=5')
>>> q.dict()
{'a': ''}
22.QueryDict.urlencode([safe])
从数据中返回查询字符串格式。
例如:
>>> q = QueryDict('a=2&b=3&b=5')
>>> q.urlencode()
'a=2&b=3&b=5'
可选地,urlencode 可以传递不需要编码的字符。(这意味着要进行 url 编码)
例如︰
>>> q = QueryDict(mutable=True)
>>> q['next'] = '/a&b/'
>>> q.urlencode(safe='/')
'next=/a%26b/'
django-QueryDict 对象的更多相关文章
- django QueryDict对象
类的原型:class QueryDict[source] 在HttpRequest对象中,GET和POST属性都是一个django.http.QueryDict的实例.也就是说你可以按本文下面提供的方 ...
- Request对象和Response对象 JsonResponse对象 和 Django shortcut functions 和QueryDict对象
request request属性 属性: django将请求报文中的请求行.头部信息.内容主体封装成 HttpRequest 类中的属性. 除了特殊说明的之外,其他均为只读的. ''' 0.Http ...
- django基础知识之QueryDict对象:
QueryDict对象 定义在django.http.QueryDict request对象的属性GET.POST都是QueryDict类型的对象 与python字典不同,QueryDict类型的对象 ...
- django HttpRequest对象
概述: 服务器接收http请求后,会根据报文创建HttpRequest对象 视图的第一个参数就是HttpRequest对象 django创建的,之后调用视图时传递给视图 属性 path:请求的完整路径 ...
- Django QueryDict
QueryDict默认是不可变的,同过将QueryDict对象的_mutable 属性的值设置成True就可以为其赋值.QueryDict对象的urlencode()方法将QueryDict转换为字符 ...
- Django HttpRequest对象详解
WSGIRequest对象 Django在接收到http请求之后,会根据http请求携带的参数以及报文信息创建一个WSGIRequest对象,并且作为视图函数第一个参数传给视图函数.也就是我们经常看到 ...
- QueryDict对象
所在的包: django.http.QueryDict HttpRequest 对象中的 GET 和 POST 属性 都是 QueryDict类型 与python字典不同:QueryDict对象一个键 ...
- 运维开发笔记整理-QueryDict对象
运维开发笔记整理-QueryDict对象 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 客户端发送数据请求有很多种,相信运维人员已经很清楚了,如果不太清楚的话可以参考我之前的学习笔 ...
- 三.接收并处理请求参数与QueryDict对象
一.get与post请求:重点看传参与接收参数 GET请求与传参 ---->url后面跟上?k1=v1&&k2=v2 POST请求与数据提交 (1)get请求:如直接在浏览 ...
- 第二章:视图层 - 6:QueryDict对象
类的原型:class QueryDict[source] 在HttpRequest对象中,GET和POST属性都是一个django.http.QueryDict的实例.也就是说你可以按本文下面提供的方 ...
随机推荐
- IE条件注释判断
相信大家都知道IE有专门的注释条件判断来引入一些css.js.html代码,但是语法有点拗口,记不住,下面我来做一下笔记: 正常的html注释: <!--注释注释注释注释...--> 注释 ...
- AngularJS总结
因为最近想学习一下ionic框架,了解到ionic是基于AngularJS语法,并且通过SASS构建应用程序,之前自己一直用Vue框架,还有Less,刚刚好趁此机会,学习一下AngularJS与SAS ...
- 命令行IRC
安装客户端irffs sudo apt-get install irssi 登陆服务器 irssi -c irc.freenode.net 设置昵称 /nick <name> 注册或登陆 ...
- jQuery中Animate进阶用法(二)
Step Type: Function( Number now, Tween tween )每个动画元素的每个动画属性将调用的函数.这个函数为修改Tween 对象提供了一个机会来改变设置中得属性值. ...
- 【LibreOJ】#6396. 「THUPC2018」弗雷兹的玩具商店 / Toyshop 线段树+完全背包
[题目]#6396. 「THUPC2018」弗雷兹的玩具商店 / Toyshop [题意]给定一个长度为n的物品序列,每个物品有价值.不超过m的重量.要求支持以下三种操作:1.物品价值区间加减,2.物 ...
- 20155235 2016-2017-2 《Java程序设计》第8周学习总结
20155235 2016-2017-2 <Java程序设计>第8周学习总结 教材学习内容总结 第十四章 NIO与NIO2 认识NIO NIO概述 Channel架构与操作 Buffer架 ...
- 洛谷 P1525 【关押罪犯】种类并查集
题解 P1525 [关押罪犯]:种类并查集 前言: 在数据结构并查集中,种类并查集属于扩展域并查集一类. 比较典型的题目就是:食物链(比本题难一些,有三个种类存在) 首先讲一下本题的贪心,这个是必须要 ...
- Unity3d 常用代码
//创建一个名为"Player"的游戏物体 //并给他添加刚体和立方体碰撞器. player=new GameObject("Player"); player. ...
- 基础图像处理之混合空间增强——(Java:拉普拉斯锐化、Sobel边缘检测、均值滤波、伽马变换)
相信看过冈萨雷斯第三版数字图像处理的童鞋都知道,里面涉及到了很多的基础图像处理的算法,今天,就专门借用其中一个混合空间增强的案例,来将常见的几种图像处理算法集合起来,看能发生什么样的化学反应 首先,通 ...
- ubuntu16.04 caffe(GPU模式)安装
历时5天终于完成了,配置中出现了各种各样的Error,这里记录一下,希望能为正在安装的人提供一点帮助. 配置中主要参考博客:http://blog.csdn.net/yhaolpz/article/d ...