数据结构¶
Werkzeug提供了一些常见的python对象的子类,用附加的特性来扩展它们。其中一些用于使它们不可变,另一些用于更改某些语义以更好地使用HTTP。
一般用途¶
Changelog
在 0.6 版本发生变更: 现在,只要包含的对象是可酸洗的,通用类就可以在每个协议中进行酸洗。这意味着 FileMultiDict
一旦它包含一个文件,就不会被pickle。
- class werkzeug.datastructures.TypeConversionDict¶
就像一个普通的口述,但是
get()
方法无法执行类型转换。MultiDict
和CombinedMultiDict
是此类的子类并提供相同的功能。Changelog
在 0.5 版本加入.
- get(key, default=None, type=None)¶
如果请求的数据不存在,则返回默认值。如果 type 是可调用的,它应转换值、返回值或引发
ValueError
如果不可能的话。在这种情况下,函数将返回默认值,就像找不到值一样:>>> d = TypeConversionDict(foo='42', bar='blub') >>> d.get('foo', type=int) 42 >>> d.get('bar', -1, type=int) -1
- 参数:
key -- 要查找的密钥。
default -- 无法查找键时返回的默认值。如果没有进一步规定 None 返回。
type -- 用于在
MultiDict
. 如果AValueError
由该可调用项引发,将返回默认值。
- class werkzeug.datastructures.ImmutableTypeConversionDict¶
像一个
TypeConversionDict
但不支持修改。Changelog
在 0.5 版本加入.
- class werkzeug.datastructures.MultiDict(mapping=None)¶
A
MultiDict
是一个字典子类,它是为处理同一个键的多个值而定制的,例如由包装器中的解析函数使用。这是必需的,因为某些HTML表单元素为同一个键传递多个值。MultiDict
实现所有标准字典方法。在内部,它将键的所有值保存为一个列表,但是标准的dict访问方法将只返回键的第一个值。如果您还想访问其他值,则必须使用 list 方法如下所述。基本用途:
>>> d = MultiDict([('a', 'b'), ('a', 'c')]) >>> d MultiDict([('a', 'b'), ('a', 'c')]) >>> d['a'] 'b' >>> d.getlist('a') ['b', 'c'] >>> 'a' in d True
它的行为类似于普通的dict,因此当找到一个键的多个值时,所有dict函数都只返回第一个值。
从Werkzeug 0.3起, KeyError 由此类引发的也是
BadRequest
HTTP异常,并将呈现400 BAD REQUEST
如果在一个catch all中捕获HTTP异常。A
MultiDict
可由以下项构成(key, value)
Tuples,一个dict,一个MultiDict
或者从werkzeug 0.2开始一些关键字参数。- 参数:
mapping -- 的初始值
MultiDict
.或者是普通的口述,或者是(key, value)
元组或 None .
- add(key, value)¶
为键添加新值。
Changelog
在 0.6 版本加入.
- 参数:
key -- 值的键。
value -- 要添加的值。
- clear() None. Remove all items from D. ¶
- copy()¶
返回此对象的浅副本。
- deepcopy(memo=None)¶
返回此对象的深度副本。
- fromkeys(value=None, /)¶
使用iterable中的键和设置为value的值创建新字典。
- get(key, default=None, type=None)¶
如果请求的数据不存在,则返回默认值。如果 type 是可调用的,它应转换值、返回值或引发
ValueError
如果不可能的话。在这种情况下,函数将返回默认值,就像找不到值一样:>>> d = TypeConversionDict(foo='42', bar='blub') >>> d.get('foo', type=int) 42 >>> d.get('bar', -1, type=int) -1
- 参数:
key -- 要查找的密钥。
default -- 无法查找键时返回的默认值。如果没有进一步规定 None 返回。
type -- 用于在
MultiDict
. 如果AValueError
由该可调用项引发,将返回默认值。
- getlist(key, type=None)¶
返回给定键的项目列表。如果该密钥不在 MultiDict ,则返回值将为空列表。就像 get , getlist 接受一个 type 参数。所有项目都将使用在那里定义的可调用项进行转换。
- 参数:
key -- 要查找的密钥。
type -- 用于在
MultiDict
. 如果AValueError
由该可调用项引发,该值将从列表中删除。
- 返回:
一
list
键的所有值。
- items(multi=False)¶
返回的迭代器
(key, value)
对。- 参数:
multi -- 如果设置为 True 返回的迭代器对于每个键的每个值都有一对。否则,它将只包含每个键的第一个值的对。
- keys() a set-like object providing a view on D's keys ¶
- lists()¶
返回的迭代器
(key, values)
pairs,其中values是与键关联的所有值的列表。
- listvalues()¶
返回与键关联的所有值的迭代器。压缩
keys()
这和打电话一样lists()
:>>> d = MultiDict({"foo": [1, 2, 3]}) >>> zip(d.keys(), d.listvalues()) == d.lists() True
- pop(key, default=no value)¶
在dict上弹出列表的第一项。然后从dict中删除键,因此将丢弃其他值:
>>> d = MultiDict({"foo": [1, 2, 3]}) >>> d.pop("foo") 1 >>> "foo" in d False
- 参数:
key -- 弹出的键。
default -- 如果提供了要在密钥不在字典中时返回的值。
- popitem()¶
从听写中弹出一个项目。
- popitemlist()¶
流行音乐
(key, list)
口述中的元组。
- poplist(key)¶
从dict中弹出键列表。如果键不在dict中,则返回空列表。
Changelog
在 0.5 版本发生变更: 如果该键不再存在,将返回一个列表,而不是引发错误。
- setdefault(key, default=None)¶
如果键在dict中,则返回该键的值,否则返回 default 并将该值设置为 key .
- 参数:
key -- 要查找的密钥。
default -- 如果密钥不在dict中,则返回默认值。如果未进一步指定,则返回 None .
- setlist(key, new_list)¶
删除键的旧值并添加新值。请注意,传递值的列表在插入字典之前将被浅复制。
>>> d = MultiDict() >>> d.setlist('foo', ['1', '2']) >>> d['foo'] '1' >>> d.getlist('foo') ['1', '2']
- 参数:
key -- 为其设置值的键。
new_list -- 具有键的新值的iterable。先删除旧值。
- setlistdefault(key, default_list=None)¶
喜欢 setdefault 但设置多个值。返回的列表不是副本,而是实际在内部使用的列表。这意味着您可以通过将项附加到列表中,将新值放入dict中:
>>> d = MultiDict({"foo": 1}) >>> d.setlistdefault("foo").extend([2, 3]) >>> d.getlist("foo") [1, 2, 3]
- 参数:
key -- 要查找的密钥。
default_list -- 默认值的可重复项。它要么被复制(如果它是一个列表),要么在返回之前被转换成一个列表。
- 返回:
一
list
- to_dict(flat=True)¶
将内容作为常规dict.if返回 flat 是 True 如果 flat 是 False 所有值都将作为列表返回。
- 参数:
flat -- 如果设置为 False 返回的dict将包含包含所有值的列表。否则,它将只包含每个键的第一个值。
- 返回:
一
dict
- update(mapping)¶
update()扩展而不是替换现有的键列表:
>>> a = MultiDict({'x': 1}) >>> b = MultiDict({'x': 2, 'y': 3}) >>> a.update(b) >>> a MultiDict([('y', 3), ('x', 1), ('x', 2)])
如果键的值列表
other_dict
为空,不会向dict添加新值,也不会创建键:>>> x = {'empty_list': []} >>> y = MultiDict() >>> y.update(x) >>> y MultiDict([])
- values()¶
返回每个键值列表中第一个值的迭代器。
- class werkzeug.datastructures.OrderedMultiDict(mapping=None)¶
像普通人一样工作
MultiDict
但保持了田地的秩序。要将有序的多听写转换为列表,可以使用items()
方法并通过multi=True
.一般来说
OrderedMultiDict
是一个数量级慢于MultiDict
.笔记
由于python的限制,不能使用
dict(multidict)
.相反,你必须使用to_dict()
方法,否则将暴露内部bucket对象。
- class werkzeug.datastructures.ImmutableMultiDict(mapping=None)¶
不变的
MultiDict
.Changelog
在 0.5 版本加入.
- class werkzeug.datastructures.ImmutableOrderedMultiDict(mapping=None)¶
不变的
OrderedMultiDict
.Changelog
在 0.6 版本加入.
- class werkzeug.datastructures.CombinedMultiDict(dicts=None)¶
A只读
MultiDict
你可以通过多次MultiDict
实例作为序列,它将组合所有包装的dict的返回值:>>> from werkzeug.datastructures import CombinedMultiDict, MultiDict >>> post = MultiDict([('foo', 'bar')]) >>> get = MultiDict([('blub', 'blah')]) >>> combined = CombinedMultiDict([get, post]) >>> combined['foo'] 'bar' >>> combined['blub'] 'blah'
这适用于所有读取操作,并将引发 TypeError 对于通常更改不可能的数据的方法。
从Werkzeug 0.3起, KeyError 由此类引发的也是
BadRequest
HTTP异常,并将呈现400 BAD REQUEST
如果在一个catch all中捕获HTTP异常。
- class werkzeug.datastructures.FileMultiDict(mapping=None)¶
一个特别的
MultiDict
它有向其中添加文件的方便方法。这是用来EnvironBuilder
通常用于单元测试。Changelog
在 0.5 版本加入.
- add_file(name, file, filename=None, content_type=None)¶
将新文件添加到dict。 file 可以是文件名或
file
-就像或是FileStorage
对象。- 参数:
name -- the name of the field.
file -- 文件名或
file
-像物体filename -- 可选文件名
content_type -- 可选内容类型
其他¶
- class werkzeug.datastructures.FileStorage(stream=None, filename=None, name=None, content_type=None, content_length=None, headers=None)¶
这个
FileStorage
类是对传入文件的精简包装。请求对象使用它来表示上载的文件。包装流的所有属性都由文件存储代理,因此可以这样做storage.read()
而不是长形storage.stream.read()
.- stream¶
上载文件的输入流。这通常指向一个打开的临时文件。
- filename¶
客户端上的文件的文件名。可以是一个
str
,或者是os.PathLike
。
- name¶
表单域的名称。
- close()¶
如果可能,关闭基础文件。
- property content_length¶
在标题中发送的内容长度。通常不可用
- property content_type¶
在头中发送的内容类型。通常不可用
- property mimetype¶
喜欢
content_type
,但不带参数(例如,不带字符集、类型等)且始终为小写。例如,如果内容类型为text/HTML; charset=utf-8
mimetype应该是'text/html'
.Changelog
在 0.7 版本加入.
- property mimetype_params¶
mimetype参数为dict。例如,如果内容类型为
text/html; charset=utf-8
参数是{{'charset': 'utf-8'}}
.Changelog
在 0.7 版本加入.
- save(dst, buffer_size=16384)¶
将文件保存到目标路径或文件对象。如果目标是一个文件对象,那么在调用后必须自己关闭它。缓冲区大小是复制过程中内存中保留的字节数。默认为16KB。
对于安全文件保存,也可以查看
secure_filename()
.- 参数:
dst -- 一个文件名,
os.PathLike
,或打开要写入的文件对象。buffer_size -- 作为
length
参数shutil.copyfileobj()
.
Changelog
在 1.0 版本发生变更: 支架
pathlib
.