变更日志 — Werkzeug 文档
变更日志
版本 1.0.1
发布 2020-03-31
- 将
RequestRedirect.get_response
的参数设为可选。 :问题:`1718` - 只允许单个访问控制允许源值。 :pr:`1723`
- 修复尝试解析不存在的内容安全策略标头时崩溃的问题。 :pr:`1731`
http_date
零填充年份 < 1000 以始终输出四位数。 :问题:`1739`- 修复交互式调试器控制台中缺少的局部变量。 :问题:`1746`
- 修复将类似文件的对象(如
io.BytesIO
)传递给FileStorage.save
。 :问题:`1733`
版本 1.0.0
发布 2020-02-06
- 放弃对 Python 3.4 的支持。 (:问题:`1478`)
- 删除版本 0.15 中发出弃用警告的代码。 (:问题:`1477`)
- 删除
werkzeug
模块提供的大多数顶级属性,以支持直接导入。 例如,用from werkzeug.urls import url_quote
代替import werkzeug; werkzeug.url_quote
。 首先安装 0.16 版以在升级时查看弃用警告。 :issue:`2`, :pr:`1640` - 添加了
utils.invalidate_cached_property()
以使缓存的属性无效。 (:pr:`1474`) - 解析
Cookie
请求标头时,不会忽略Set-Cookie
响应标头的指令键。 这允许 cookie 具有诸如“过期”和“版本”之类的名称。 (:问题:`1495`) - 请求 cookie 被解析为
MultiDict
以捕获具有相同键的 cookie 的所有值。cookies[key]
返回第一个值而不是最后一个值。 使用cookies.getlist(key)
获取所有值。parse_cookie
也默认为MultiDict
。 :issue:`1562`, :pr:`1458` - 将
charset=utf-8
添加到 HTTP 异常响应的CONTENT_TYPE
标头。 (:pr:`1526`) - 交互式调试器处理嵌套范围内的外部变量,例如 lambda 和推导式。 :issue:`913`, :issue:`1037`, :pr:`1532`
- Mac 上 Opera 60 的用户代理正确报告为“opera”而不是“chrome”。 :问题:`1556`
- Android 上的 Crosswalk 平台正确报告为“android”而不是“chromeos”。 (:pr:`1572`)
- 当前服务器名称与配置的服务器名称不匹配时发出警告。 :问题:`760`
- 如果当前方案匹配,则具有方案默认端口的配置服务器名称将与不带端口的当前服务器名称匹配。 :pr:`1584`
InternalServerError
有一个original_exception
属性,框架可以使用它来跟踪错误的原始原因。 :pr:`1590`- 标题的相等性测试独立于标题关键案例,例如
X-Foo
与x-foo
相同。 :pr:`1605` http.dump_cookie()
接受'None'
作为samesite
的值。 :问题:`1549`set_cookie()
接受samesite
参数。 :pr:`1705`- 通过 Response.content_security_policy 数据结构支持 Content Security Policy 头。 :pr:`1617`
LanguageAccept
将回退到匹配“en”代表“en-US”或“en-US”代表“en”,以更好地支持仅匹配主要语言标签的客户或翻译。 :issue:`450`, :pr:`1507`MIMEAccept
在匹配时使用 MIME 参数来实现特异性。 :issue:`458`, :pr:`1574`- 如果开发服务器使用配置为验证客户端证书的
SSLContext
启动,则 PEM 格式的证书将作为environ["SSL_CLIENT_CERT"]
提供。 :pr:`1469` is_resource_modified
将针对除GET
和HEAD
之外的方法运行,而不是总是返回False
。 :问题:`409`SharedDataMiddleware
在尝试使用包加载器访问目录而不是文件时返回 404 而不是 500。 删除了对 setuptools 和 pkg_resources 的依赖。 :问题:`1599`- 添加
response.cache_control.immutable
标志。 请记住,浏览器对此Cache-Control
标头选项的支持仍处于试验阶段,可能无法实现。 :问题:`1185` - 开发服务器的可选请求日志突出显示由 Click 而不是 termcolor 处理。 :问题:`1235`
- 对开发服务器的可选 ad-hoc TLS 支持由加密而不是 pyOpenSSL 处理。 :pr:`1555`
FileStorage.save()
支持pathlib
和 PEP 519PathLike
对象。 :问题:`1653`- 调试器安全 pin 在 Podman 管理的容器中是唯一的。 :问题:`1661`
- 启用
host_matching
时构建 URL 会在存在具有不同主机的重复端点时考虑当前主机。 :问题:`488` 429 TooManyRequests
和503 ServiceUnavailable
HTTP 异常采用retry_after
参数来设置Retry-After
标头。 :问题:`1657`Map
和Rule
有一个merge_slashes
选项可以将多个斜杠合并为一个,类似于 HTTP 服务器的行为。 这是默认启用的。 :pr:`1286, 1694`- 将 HTTP 103、208、306、425、506、508 和 511 添加到状态代码列表中。 :pr:`1678`
- 在
Headers
数据结构中添加update
、setlist
和setlistdefault
方法。extend
方法可以取MultiDict
和 kwargs。 :pr:`1687, 1697` - 开发服务器接受以两个斜杠开头的路径,而不是去掉第一个路径段。 :问题:`491`
- 将访问控制(跨源请求共享,CORS)标头属性添加到
Request
和Response
包装器。 :pr:`1699` Accept
值不再按字母顺序排列以用于同等质量的标签。 而是保留了初始顺序。 :问题:`1686`- 为替代实现添加了
Map.lock_class
属性。 :pr:`1702` - 支持在路由系统中匹配和构建 WebSocket 规则,供异步框架使用。 :pr:`1709`
- 跨越整个文件的范围请求以 206 而不是 200 响应,以更符合 RFC 7233。 这可能有助于为旧浏览器提供媒体服务。 :问题:`410, 1704`
SharedDataMiddleware
默认fallback_mimetype
为application/octet-stream
。 如果文件名看起来像文本 mimetype,则会向其中添加utf-8
字符集。 这与BaseResponse
和 Flask 的send_file()
的行为相匹配。 :问题:`1689`
版本 0.16.1
发布 2020-01-27
- 修复子包的弃用消息中的导入位置。 :问题:`1663`
- 修复 Python 3.5 上当开发服务器响应没有内容时的 SSL 错误。 :问题:`1659`
版本 0.16.0
发布 2019-09-19
弃用
werkzeug
模块提供的大多数顶级属性,以支持直接导入。 不推荐使用的导入将在 1.0 版中删除。例如,用
from werkzeug.urls import url_quote
代替import werkzeug; werkzeug.url_quote
。 弃用警告将显示要使用的正确导入。werkzeug.exceptions
和werkzeug.routing
也应该导入而不是访问,但由于技术原因不能显示警告。
版本 0.15.6
发布 2019-09-04
- 解决 pip 中导致重新加载器在 Windows 上以脚本为入口点失败的错误。 这解决了 Flask 的 flask run 命令失败并显示“No module named Scriptsflask”的问题。 :问题:`1614`
ProxyFix
默认信任X-Forwarded-Proto
标头。 :问题:`1630`ProxyFix
已弃用的num_proxies
参数设置x_for
、x_proto
和x_host
以匹配 0.14 行为。 这是为了减少中间升级的破坏性,但该参数仍将在 1.0 中删除。 :问题:`1630`
版本 0.15.5
发布 2019-07-17
- 由于 Python 3.8 中
ast.Module
的更改,修复了TypeError
。 :问题:`1551` - 修复某些 Python 2.7 版本的调试版本中的 C 断言失败。 :问题:`1553`
BadRequestKeyError
如果e.show_exception
设置为True
,则在描述中添加KeyError
消息。 这是比原始 0.15.0 行为更安全的默认设置,并且更易于控制而不会丢失信息。 :pr:`1592`- 将调试器升级到 jQuery 3.4.1。 :问题:`1581`
- 解决某些外部调试器中导致重新加载器失败的问题。 :问题:`1607`
- 解决重新加载器无法内省作为鸡蛋安装的 setuptools 脚本的问题。 :问题:`1600`
- 即使脚本被标记为可执行,重新加载器也将使用
sys.executable
,恢复 0.15 中引入的 NixOS 的行为。 重新加载器不应再导致OSError: [Errno 8] Exec format error
。 :问题:`1482`, :问题:`1580` SharedDataMiddleware
安全地处理带有 Windows 驱动器名称的路径。 :问题:`1589`
版本 0.15.3
发布 2019-05-14
- 在 Python 2.7 中正确处理开发服务器中的多行标题折叠。 (:问题:`1080`)
- 将
response
参数恢复为Unauthorized
。 (:pr:`1527`) - 如果未给出
www_authenticate
,则Unauthorized
不会添加WWW-Authenticate
标头。 (:问题:`1516`) - 默认的 URL 转换器正确地将字节编码为字符串,而不是用
b
来表示它们。 (:问题:`1502`) - 修复
ProfilerMiddleware
中的文件名格式字符串以正确处理浮点值。 (:问题:`1511`) - 更新
LintMiddleware
以在 Python 3 上工作。 (:问题:`1510`) - 调试器检测链式异常中的周期并且在这种情况下不会超时。 (:问题:`1536`)
- 在 Docker 中运行开发服务器时,调试器安全引脚现在每个容器都是唯一的。
版本 0.15.2
发布 2019-04-02
Rule
代码生成使用覆盖将忽略的文件名。 之前的值“生成”导致覆盖失败。 (:问题:`1487`)- 如果没有持久的 cookie,测试客户端将删除 cookie 标头。 这修复了 0.15.0 中引入的问题,其中原始请求中的 cookie 用于重定向,导致注销等功能失败。 (:问题:`1491`)
- 测试客户端在将环境传递给应用程序之前复制环境,以防止就地修改影响重定向请求。 (:问题:`1498`)
"werkzeug"
记录器仅在日志链中没有为其级别配置处理程序时才添加处理程序。 如果其他代码首先配置日志记录,这将避免双重日志记录。 (:问题:`1492`)
版本 0.15.1
发布 2019-03-21
Unauthorized
将description
作为第一个参数,恢复以前的行为。 新的www_authenticate
参数列在第二位。 (:问题:`1483`)
版本 0.15.0
发布 2019-03-19
- 构建 URL 的速度提高了大约 7 倍。 每个
Rule
编译一个优化的函数来构建自己。 (:pr:`1281`) MapAdapter.build()
可以传递一个MultiDict
来表示一个键的多个值。 在传递带有列表值的 dict 时,它已经这样做了。 (:pr:`724`)path_info
对于Map.bind()
,默认为'/'
。 (:issue:`740`, :pr:`768`, :pr:`1316`)- 将
RequestRedirect
代码从 301 更改为 308,在重定向期间保留动词和请求正文(表单数据)。 (:pr:`1342`) - 如果传递
signed=True
参数,URL 规则中的int
和float
转换器将处理负值。 例如,/jump/<int(signed=True):count>
。 (:pr:`1355`) Response.get_wsgi_headers()
中的Location
自动更正是相对于当前路径而不是根路径。 (:issue:`693`, :pr:`718`, :pr:`1315`)- 412 响应再次包含实体标头和正文中的错误消息。 它们最初在实现
If-Match
(:pr:`1233`) 时被省略,但规范似乎并没有禁止它。 (:issue:`1231`, :pr:`1255`) - 删除 1xx 和 204 响应的 Content-Length 标头。 这修复了之前不发送正文但标题仍然存在的更改。 新行为符合 RFC 7230。 (:pr:`1294`)
Unauthorized
使用www_authenticate
参数来设置响应的WWW-Authenticate
标头,这在技术上是有效的 401 响应所必需的。 (:issue:`772`, :pr:`795`)- 添加对状态代码 424
FailedDependency
的支持。 (:pr:`1358`) http.parse_cookie()
忽略空段,而不是生成没有键或值的 cookie。 (:issue:`1245`, :pr:`1301`)parse_authorization_header()
(和Authorization
、authorization
)将授权标头视为 UTF-8。 在 Python 2 上,基本身份验证用户名和密码是unicode
。 (:pr:`1325`)parse_options_header()
理解 RFC 2231 参数延续。 (:pr:`1417`)uri_to_iri()
不会在未保留的类中取消引用 ASCII 字符,例如空格,并在解码时留下引用的无效字节。iri_to_uri()
不引用保留字符。 有关这些字符类别,请参阅 RFC 3987。 (:pr:`1433`)get_content_type
为任何以+xml
结尾的 mimetype 附加一个字符集,而不仅仅是以application/
开头的那些。 已知的文本类型如application/javascript
也被赋予字符集。 (:pr:`1439`)- 清理
werkzeug.security
模块,移除过时的 hashlib 支持。 (:pr:`1282`) - 在
generate_password_hash()
中,PBKDF2默认使用150000次迭代,从50000次增加。 (:pr:`1377`) ClosingIterator
在包装的 iterable 上调用close
,而不是内部迭代器。 这不会影响__iter__
返回self
的对象。 对于其他对象,之前没有调用过该方法。 (:issue:`1259`, :pr:`1260`)- 字节可以用作
Headers
中的键,它们将像值一样被解码为 Latin-1。 (:pr:`1346`) Range
验证传递给它的范围元组列表将产生一个有效的Range
标头。 (:pr:`1412`)FileStorage
查找stream._file
上的属性(如果stream
上不存在这些属性),解决tempfile.SpooledTemporaryFile()
未实现所有io.IOBase
。 参见 https://github.com/python/cpython/pull/3249。 (:pr:`1409`)CombinedMultiDict.copy()
将浅层可变副本作为MultiDict
返回。 副本不再反映对组合字典的更改,但更普遍有用。 (:pr:`1420`)- 调试器使用的 jQuery 版本更新为 3.3.1。 (:pr:`1390`)
- 调试器正确呈现长
markupsafe.Markup
实例。 (:pr:`1393`) - 当 Werkzeug 作为 zip 文件安装时,调试器可以提供资源。
DebuggedApplication.get_resource
使用pkgutil.get_data
。 (:pr:`1401`) - 调试器和服务器日志支持 Python 3 的链式异常。 (:pr:`1396`)
- 交互式调试器突出显示来自用户代码的帧,以便在长堆栈跟踪中轻松挑选它们。 请注意,如果 env 是使用 virtualenv 而不是 venv 创建的,调试器可能会错误地对某些帧进行分类。 (:pr:`1421`)
- 单击交互式调试器顶部的错误消息将跳到回溯的底部。 (:pr:`1422`)
- 生成 PIN 时,调试器将忽略当前 UID 没有关联用户名时引发的
KeyError
,这可能在 Docker 中发生。 (:问题:`1471`) BadRequestKeyError
在描述中添加了KeyError
消息,更清楚是什么导致了 400 错误。 像 Flask 这样的框架可以通过设置e.args = ()
在生产中省略这些信息。 (:pr:`1395`)- 如果从
import_string()
发生嵌套的ImportError
,则回溯会提到嵌套导入。 删除用于处理“父级尚未设置的模块”的未经测试的代码路径。 (:pr:`735`) - 在使用 PDB 等工具时触发重新加载不再隐藏输入。 (:pr:`1318`)
- 如果 Python 文件被标记为可执行文件,则重新加载器不会将 Python 可执行文件添加到命令行。 这允许重新加载器在 NixOS 上工作。 (:pr:`1242`)
- 修复了在使用
python -m app
运行时sys.path
在重新加载之间会发生变化的问题。 重载器可以检测到一个模块是用“-m”运行的,并在重载时重建它而不是sys.argv
中的文件路径。 (:pr:`1416`) - 开发服务器可以通过传递像
unix://app.socket
这样的主机名来绑定到 Unix 套接字。 (:pr:`209`, :pr:`1019`) - 服务器使用
IPPROTO_TCP
常量代替SOL_TCP
以实现 Jython 兼容性。 (:pr:`1375`) - 当使用带有
run_simple()
的临时 SSL 证书时,证书显示为自签名,而不是由无效机构签名。 (:pr:`1430`) - 开发服务器记录未加引号的 IRI 而不是原始请求行,以便在开发期间更容易在请求路径中使用 Unicode。 (:问题:`1115`)
- 开发服务器识别 Python 3 上的
ConnectionError
以使客户端断开连接静音,并且不会使应用程序内部可能已引发的其他OSErrors
静音。 (:pr:`1418`) - 环境键
REQUEST_URI
和RAW_URI
包含百分比解码之前的原始路径。 这是非标准的,但许多 WSGI 服务器添加了它们。 中间件可以用这个替换PATH_INFO
以根据原始值进行路由。 (:pr:`1419`) EnvironBuilder
不设置CONTENT_TYPE
或CONTENT_LENGTH
在环境中如果它们没有设置。 以前,如果未设置,则这些使用默认值。 现在可以区分空值和未设置值。 (:pr:`1308`)- 如果查询字符串参数会覆盖路径中的查询字符串,则测试客户端会引发
ValueError
。 (:pr:`1338`) test.EnvironBuilder
和test.Client
采用json
参数,而不是手动传递data
和content_type
。 这是使用test.EnvironBuilder.json_dumps()
方法序列化的。 (:pr:`1404`)test.Client
重定向处理被重写。 (:pr:`1402`)- 重定向环境是从初始请求环境复制的。
- 重定向到根目录下的路径时,正确区分脚本根目录和路径。
- HEAD 方法未更改为 GET。
- 307 和 308 代码保留方法和主体。 所有其他人忽略正文和相关标题。
- 按照浏览器的操作,将标头传递给所有代码的新请求。
test.EnvironBuilder
在从数据中检测它们时,除了 WSGI 密钥之外,还设置内容类型和长度标头。- 即使在
buffered=False
时也会迭代中间响应体,以确保迭代器中间件可以安全地运行清理代码。 只有最后一个响应不被缓冲。 (:pr:`988`)
EnvironBuilder
、FileStorage
和wsgi.get_input_stream()
不再共享全局_empty_stream
实例。 这通过防止在一个请求中关闭流会影响其他用途的情况来改善测试隔离。 (:pr:`1340`)- 1.0 中默认的
SecureCookie.serialization_method
将从pickle
变为json
。 要升级现有令牌,如果json
失败,请覆盖unquote()
以尝试pickle
。 (:pr:`1413`) CGIRootFix
不再为非常旧的 Lighttpd 版本修改PATH_INFO
。LighttpdCGIRootFix
在 0.9 中更名为CGIRootFix
。 两者都已弃用,并将在 1.0 版中删除。 (:pr:`1141`)werkzeug.wrappers.json.JSONMixin
已被 Flask 的实现所取代。 检查完整 API 的文档。 (:pr:`1445`)- contrib 模块已弃用,将移入
werkzeug
核心或在 1.0 版中完全删除。 一些已经发出弃用警告的模块已被删除。 请务必使用python -W default::DeprecationWarning
运行或测试您的代码,以捕获您正在使用的任何已弃用的代码。 (:问题:`4`)LintMiddleware
已移至werkzeug.middleware.lint
。ProfilerMiddleware
已移至werkzeug.middleware.profiler
。ProxyFix
已移至werkzeug.middleware.proxy_fix
。JSONRequestMixin
已移至werkzeug.wrappers.json
。cache
已被提取到一个单独的项目中,cachelib。 Werkzeug 中的版本已弃用。securecookie
和sessions
已被提取到一个单独的项目中,secure-cookie。 Werkzeug 中的版本已弃用。fixers
中的所有内容,除了ProxyFix
,都已弃用。wrappers
中的所有内容,除了JSONMixin
,都已弃用。atom
已弃用。 这与 Werkzeug 的其余部分不符,并且由社区中的专用图书馆提供更好的服务。jsrouting
被移除。 在呈现模板或 JSON 响应时设置 URL。limiter
被移除。 它的具体用途由 Werkzeug 直接处理,但流限制通常由 WSGI 服务器处理更好。testtools
被移除。 与默认测试客户端相比,它没有提供显着的优势。iterio
已弃用。
wsgi.get_host()
不再看X-Forwarded-For
。 使用ProxyFix
来处理。 (:issue:`609`, :pr:`1303`)ProxyFix
重构以支持更多标头、多个值和更安全的配置。- 每个标头支持多个值。 为每个标头单独配置受信任的代理数量。
num_proxies
参数已弃用。 (:pr:`1314`) - 基于
X-Forwarded-Host
设置SERVER_NAME
和SERVER_PORT
。 (:pr:`1314`) - 设置
SERVER_PORT
并在X-Forwarded-Port
的基础上修改HTTP_HOST
。 (:issue:`1023`, :pr:`1304`) - 基于
X-Forwarded-Prefix
设置SCRIPT_NAME
。 (:问题:`1237`) - 原始 WSGI 环境值存储在
werkzeug.proxy_fix.orig
键中,这是一个 dict。 个别按键werkzeug.proxy_fix.orig_remote_addr
、werkzeug.proxy_fix.orig_wsgi_url_scheme
和werkzeug.proxy_fix.orig_http_host
已弃用。
- 每个标头支持多个值。 为每个标头单独配置受信任的代理数量。
- 来自
werkzeug.wsgi
的中间件已移至werkzeug.middleware
下的单独模块,以及来自werkzeug.contrib
的中间件。 旧的werkzeug.wsgi
导入已弃用,并将在 1.0 版中删除。 (:pr:`1452`)werkzeug.wsgi.DispatcherMiddleware
已移至werkzeug.middleware.dispatcher.DispatcherMiddleware
。werkzeug.wsgi.ProxyMiddleware
移至werkzeug.middleware.http_proxy.ProxyMiddleware
。werkzeug.wsgi.SharedDataMiddleware
已移至werkzeug.middleware.shared_data.SharedDataMiddleware
。
ProxyMiddleware
代理查询字符串。 (:pr:`1252`)ProfilerMiddleware
生成的文件名可以自定义。 (:问题:`1283`)werkzeug.wrappers
模块已转换为包,其各种类已组织为单独的模块。 任何以前记录的类,被理解为现有的公共 API,仍然可以从werkzeug.wrappers
导入,或者可以从它们的特定模块导入。 (:pr:`1456`)
版本 0.14.1
2017 年 12 月 31 日发布
- 解决了集成开发服务器中状态代码处理的回归问题。
版本 0.14
2017 年 12 月 31 日发布
Request.application
现在会自动捕获 HTTP 异常。- 添加了对 Edge 作为浏览器的支持。
- 添加了对缺少
SpooledTemporaryFile
的平台的支持。 - 通过 if-match 添加对 etag 处理的支持
- 添加了对 SameSite cookie 属性的支持。
- 新增
werkzeug.wsgi.ProxyMiddleware
- 为
NullCache
实现has
- 缓存客户端上的
get_multi
现在一直返回列表。 - 改进了重新加载器的看门狗观察器关闭,以免在旧 Python 版本上退出时崩溃。
- 根据 RFC 2231 添加了对
filename*
文件名属性的支持 - 解决了在 Windows 上无法准确读取重新加载器 PIN 的机器 ID 的问题。
- 为重新加载器中的 init 文件中的语法错误添加了解决方法。
- 添加了对在 Windows 上使用带有控制台脚本的重新加载器的支持。
- 在不需要 HTTP 正文(204、204、HEAD 请求等)的情况下,内置 HTTP 服务器将不再关闭连接
EnvironHeaders
对象现在跳过空的内容类型和长度,如果它们被设置为假值。- Werkzeug 将不再在 1xx 或 204/304 响应上发送内容长度标头。
- 现在还允许 Cookie 值包含斜线和等号而不用引号。
- 放宽了路由转换器参数的正则表达式。
- 如果发送的 cookie 没有值,它们现在假定为空值,解析器接受这一点。 以前,这可能会损坏跟随该值的 cookie。
- 测试
Client
和EnvironBuilder
现在像请求对象一样支持 mimetypes。 - 在 URL 规则中添加了对静态权重的支持。
- 更好地处理一些更复杂的重新加载器场景,其中 sys.path 包含非目录路径。
EnvironHeaders
如果将非字符串键传递给它,则不再引发奇怪的错误。
版本 0.13
2017 年 12 月 7 日发布
- 弃用对 Python 2.6 和 3.3 的支持。 这些版本不会运行 CI 测试,并且在下一版本中将完全取消支持。 (:issue:`托盘/meta#24`)
- 当端口不是整数时提高
TypeError
。 (:pr:`1088`) - 完全弃用
werkzeug.script
。 请改用 单击 。 (:pr:`1090`) response.age
被解析为timedelta
。 以前,它被错误地视为datetime
。 标头值是整数秒,而不是日期字符串。 (:pr:`414`)- 修复
TypeConversionDict
中使用转换器时不会传播错误的错误。 (:问题:`1102`) Authorization.qop
是一个字符串而不是一个集合,以符合 RFC 2617。 (:pr:`984`)- 默认情况下,当编码的 cookie 大于 4093 字节时,会引发异常。 浏览器可能会默默地忽略比这更大的 cookie。
BaseResponse
有一个新属性max_cookie_size
和dump_cookie
有一个新参数max_size
来配置它。 (:pr:`780`, :pr:`1109`) - 修复
werkzeug.contrib.lint.GuardedIterator.close
中的类型错误。 (:pr:`1116`) BaseResponse.calculate_content_length
现在可以正确地用于 Python 3 上的 Unicode 响应。 它首先使用iter_encoded
进行编码。 (:问题:`705`)- 安全 cookie contrib 在 Python 3 上使用字符串密钥。 (:pr:`1205`)
- 共享数据中间件接受一个列表而不是静态位置的字典来保留查找顺序。 (:pr:`1197`)
- 没有编码的 HTTP 标头值可以包含单引号。 (:pr:`1208`)
- 内置的开发服务器支持使用分块传输编码接收请求。 (:pr:`1198`)
版本 0.12.2
2017 年 5 月 16 日发布
- 修复回归:拉取请求
#892
阻止 Werkzeug 正确记录反向代理后面的远程客户端的 IP,即使在使用 ProxyFix 时也是如此。 - 修复 Windows 上 safe_join 中的错误。
版本 0.12.1
2017 年 3 月 15 日发布
- 修复 Windows 上重新加载器(在调试模式下使用)的崩溃。 (OSError:[WinError 10038])。 请参阅拉取请求
#1081
- 部分恢复对 Headers 的类层次结构的更改。 参见
#1084
。
版本 0.12
2017 年 3 月 10 日发布
- 吐出 werkzeug.script 的大弃用警告
- 在可用时在内部使用 inspect.getfullargspec,因为 inspect.getargspec 在 3.6 中消失了
- 添加了对状态代码 451 和 423 的支持
- 改进了构建错误建议。 特别是只有当有人对错误进行字符串化时,才会计算建议。
- 添加了对 uWSGI 缓存后端的支持。
- 修复迭代 FileStorage 会导致无限循环的错误。
- 数据结构现在从 stdlib 中 collections 模块的相关基类继承。 见#794。
- 在用户代理字符串中添加对识别 NetBSD、OpenBSD、FreeBSD、DragonFlyBSD 平台的支持。
- 正确识别 SeaMonkey 浏览器名称和版本
- 识别百度蜘蛛和 bingbot 用户代理
- 如果 LocalProxy 的包装对象是函数,则使用 __wrapped__ 属性引用它。
generate_password_hash
的默认值已更改为更安全的,请参阅拉取请求#753
。- 在选项标头解析中添加对编码的支持,请参阅拉取请求
#933
。 test.Client
现在可以正确处理带有相对 URL 的位置标头,请参阅拉取请求#879
。- 当 HTTPException 被引发时,它现在会打印描述,以便于调试。
- Werkzeug 的类似 dict 的数据结构现在在 Python 2 下具有
view
-方法,请参阅拉取请求#968
。 - 修复初始化期间未提供
stream_factory
时MultiPartParser
中的错误,请参阅拉取请求#973
。 - 在调试器中间件的 Python 提示中禁用自动更正和拼写检查器,请参阅拉取请求
#994
。 - 当方法不匹配时不要重定向到斜线路由,请参阅拉取请求
#907
。 - 修复在冻结包中使用
SharedDataMiddleware
时的错误,请参阅拉取请求#959
。 - Range 标头解析函数修复了无效值
#974
。 - 添加对字节范围请求的支持,请参阅拉取请求
#978
。 - 在开发服务器
#1004
中使用现代加密默认值。 - 测试客户端的 post() 方法现在通过 data 参数接受文件对象。
- 基于 HTTP 代码
#1013
的颜色 run_simple 的终端输出。 - 修复调试器控制台中的 self-XSS,参见
#1031
。 - 修复 IPython 5.x shell 支持,参见
#1033
。 - 将 Accept 数据结构更改为首先按特异性排序,从而在对 mime 类型使用
best_match
时获得更准确的结果(例如在requests.accept_mimetypes.best_match
中)
版本 0.11.16
- werkzeug.serving:如果仅由客户端提供,则设置 CONTENT_TYPE / CONTENT_LENGTH
- werkzeug.serving:修复使用 python -m werkzeug.serving 时重新加载器崩溃的问题。
版本 0.11.15
于 2016 年 12 月 30 日发布。
- 对先前版本中的错误修正的修正。
版本 0.11.14
于 2016 年 12 月 30 日发布。
- 在导入
ForkingMixIn
之前检查平台是否可以分叉,在这样的平台上创建ForkingWSGIServer
时引发异常,参见PR#999
。
版本 0.11.13
于 2016 年 12 月 26 日发布。
- 正确修复某些 Windows 安装上的重新加载器发行者。
版本 0.11.12
于 2016 年 12 月 26 日发布。
- 修复 multidicts 中关于空列表的更多错误。 参见
#1000
。 - 将一些文档字符串添加到一些以前无意中丢失的 EnvironBuilder 属性。
- 在 Windows 上添加了重新加载器的解决方法。
版本 0.11.11
于 2016 年 8 月 31 日发布。
- 修复 Python3 的 JSONRequestMixin。 见#731
- 在传递整数时修复测试客户端中损坏的字符串处理。 见#852
- 修复
parse_options_header
中以逗号或分号开头的无效内容类型会导致无效返回值的错误,请参阅问题#995
。 - 在将空列表作为值传递时修复 multidicts 中的错误,请参阅问题
#979
。 - 修复在 Werkzeug 调试器上允许 XSS 的安全问题。 参见
#1001
。
版本 0.11.10
于 2016 年 5 月 24 日发布。
- 修复了在 Python 2.6 上运行并使用损坏的语言环境时发生的错误。 请参阅拉取请求 #912。
- 修复了在 Google App Engine 上运行调试器时发生的崩溃。 见问题#925。
- 修复了可能导致内存耗尽的多部分解析问题。
版本 0.11.9
于 2016 年 4 月 24 日发布。
- 更正了导致调试器在 POSIX 系统上不使用机器 GUID 的问题。
- 更正了 Python 3 上调试器 PIN 使用的 Unicode 错误。
- 更正了引脚调试代码中的时间戳验证。 如果没有此修复程序,该引脚会被记住太久。
版本 0.11.8
于 2016 年 4 月 15 日发布。
- 修复了 Python 3 上 OS X 上机器 GUID 检测代码的问题。
版本 0.11.7
于 2016 年 4 月 14 日发布。
- 修复了调试器在 Python 3 上的回归。
版本 0.11.6
于 2016 年 4 月 14 日发布。
- werkzeug.serving:仍然显示错误请求的客户端地址。
- 改进了调试器基于 PIN 的保护,使其更难通过尝试 cookie 进行暴力破解。 请记住,调试器 不适用于在生产环境中运行
- 将 pin 超时增加到一周,以减少人们的烦恼,这应该会减少用户完全禁用 pin 检查的机会。
- werkzeug.serving:修复路径以双斜线开头时损坏的 HTTP_HOST。
版本 0.11.5
于 2016 年 3 月 22 日发布。
- werkzeug.serving:修复尝试 SSL 连接到 HTTP 服务器时崩溃的问题。
版本 0.11.4
于 2016 年 2 月 14 日发布。
- 修复了 werkzeug.serving 无法从 -m 标志工作的问题。
- 修复了错误的弱 etag 处理。
版本 0.11.3
于 2015 年 12 月 20 日发布。
- 修复了复制操作不适用于代理的问题。
- 更改了开发服务器的日志记录操作,以再次正确记录服务器在所有情况下的运行位置。
- 使用 SSL 包装修复了另一个回归,类似于 0.11.2 中的修复,但针对不同的代码路径。
版本 0.11.2
于 2015 年 11 月 12 日发布。
- 在 Python 3 上修复 Windows 上的可继承套接字。
- 修复了分叉服务器不再启动的问题。
- 修复了支持通过文件描述符打开套接字的平台上的 SSL 包装。
- 不再从看门狗重新加载器登录。
- 主机中的 Unicode 错误现在可以更好地捕获或转换为错误的请求错误。
版本 0.11.1
于 2015 年 11 月 10 日发布。
- 修复了调试器中 Python 3 的回归。
版本 0.11
2015 年 11 月 8 日发布,代号 Gleisbaumaschine。
- 为
run_simple
和werkzeug.serving
中的其他功能添加了reloader_paths
选项。 这允许用户使用自定义路径完全覆盖 Werkzeug 的 Python 模块监视。 - Werkzeug 类的许多自定义缓存属性现在是 Python 的
property
类型(问题#616
)的子类。 bind_to_environ
现在不区分HTTP_HOST
(拉取请求#204
)中的隐式和显式默认端口号。BuildErrors
现在提供更多信息。 它们带有完整的句子作为错误消息,并提供建议(拉请求#691
)。- 修复了用户代理解析器中会提取 Safari 版本号而不是版本的错误(拉取请求
#703
)。 - 修复了 twemproxy 的 RedisCache set_many 被破坏的问题,它不支持默认的 MULTI 命令(拉请求
#702
)。 mimetype
请求和响应类的参数现在总是转换为小写。- 更改缓存,以便在超时为 0 时缓存永不过期。 这也解决了 redis setex 的问题(issue
#550
) - Werkzeug 现在假设
UTF-8
作为 Unix 上的文件系统编码,如果 Python 检测到它是 ASCII。 - 新的可选 有 缓存方法。
- 修复了 parse_options_header(拉取请求
#643
)中的各种错误。 - 如果启用了重新加载器,则服务器现在将在可能的情况下打开父进程中的套接字。 这意味着当重新加载器从客户端启动连接时,它将等待而不是拆除。 这不适用于所有 Python 版本。
- 为调试器实现了基于 PIN 的身份验证。 这可以选择禁用,但不鼓励。 这一更改是必要的,因为我们发现有太多人在生产中运行调试器。
- Devserver 不再需要安装 SSL 模块。
版本 0.10.5
(错误修复发布,发布日期尚未确定)
- 重新加载器:正确检测通过将临时文件移动到原始文件上所做的文件更改,例如 PyCharm 的案例(拉取请求
#722
)。 - 修复 Python 3 下
werkzeug.datastructures.ETags
的布尔行为(问题#744
)。
版本 0.10.4
(错误修复版本,于 2015 年 3 月 26 日发布)
- 重新发布 0.10.3,手动删除了打包工件。
版本 0.10.3
(错误修复版本,于 2015 年 3 月 26 日发布)
- 重新发布 0.10.2,没有打包工件。
版本 0.10.2
(错误修复版本,于 2015 年 3 月 26 日发布)
- 修复了
empty
可能破坏依赖关键字参数的第三方库的问题(拉取请求#675
) - 改进了
Rule.empty
,提供`get_empty_kwargs
以允许设置自定义 kwargs,而无需覆盖整个empty
方法。 (拉取请求#675
) - 修复了重新加载器的
`extra_files`
参数,当包含在服务器参数中时不会导致启动崩溃 - 现在不再支持在构建 URL 时使用 MultiDict。 该行为引入了几个回归。
- 修复 stat-reloader 的性能问题(拉取请求
#715
)。
版本 0.10.1
(错误修复版本,于 2015 年 2 月 3 日发布)
- 修复了具有多个 URL 查询值的回归(拉取请求
#667
)。 - 修复 eventlet 的monkeypatching 和内置服务器的问题(拉取请求
#663
)。
版本 0.10
2015 年 1 月 30 日发布,代号 Bagger。
- 更改了
contrib.cache
中缓存的错误处理和改进的测试套件。 - 修复了 Python 3 在创建 adhoc ssl 上下文时由于未定义 sys.maxint 的错误。
- 修复了 Python 3 上的一个错误,该错误导致
make_ssl_devcert()
因异常而失败。 - 添加了 504 和 505 的例外情况。
- 添加了对 ChromeOS 检测的支持。
- 向路由系统添加了 UUID 转换器。
- 添加了解释如何退出服务器的消息。
- 修复了 Python 2 上的一个错误,该错误导致
len
forwerkzeug.datastructures.CombinedMultiDict
崩溃。 - 如果找到兼容的摘要,则添加了对 stdlib pbkdf2 hmac 的支持。
- 移植测试套件以使用
py.test
。 - 对各种中间件的小优化(拉取请求
#496
和#571
)。 - 对内置服务器使用 stdlib
ssl
模块而不是OpenSSL
(问题#434
)。 这意味着不再支持 OpenSSL 上下文,而是来自 stdlib 的ssl.SSLContext
。 - 构建外部 URL 时允许使用协议相对 URL。
- 修复了 Atom 联合以打印 tz 感知日期时间对象的时区偏移量(拉取请求
#254
)。 - 改进了重新加载器以跟踪添加的文件并从包中存在语法错误的损坏的 sys.modules 设置中恢复。
cache.RedisCache
现在支持 redis 对象的任意**kwargs
。werkzeug.test.Client
现在在解析 307 重定向时使用原始请求方法(拉请求#556
)。werkzeug.datastructures.MIMEAccept
现在可以正确处理 mimetype 参数(拉请求#205
)。werkzeug.datastructures.Accept
现在根据 RFC 2616(拉取请求#536
)将0
的质量视为无法容忍。werkzeug.urls.url_fix
现在使用idna
编码正确编码主机名(问题#559
)。 它也不再在格式错误的 URL 上崩溃(问题#582
)。werkzeug.routing.MapAdapter.match
现在可以识别路径/
和空路径之间的区别(问题#360
)。- 交互式调试器现在尝试解码非 ascii 文件名(问题
#469
)。 - 将生成的 SSL 证书的默认密钥大小增加到 1024 位(问题
#611
)。 - 添加了对在调用
redirect()
时指定要使用的Response
子类的支持。 werkzeug.test.EnvironBuilder
现在不再使用请求方法来猜测内容类型,而完全依赖于form
、files
和input_stream
属性(问题 [ X158X])。- 将 Symbian 添加到用户代理平台列表中。
- 修复了 make_conditional 以自动遵守_set_content_length
- 写入 response.stream 时取消设置
Content-Length
(问题#451
) wrappers.Request.method
现在总是大写,消除了 WSGI 环境的不一致(问题647
)。routing.Rule.empty
现在与Rule
的子类一起正常工作(拉请求#645
)。- 根据并发更新使地图更新安全。
- 允许为 url 构建的同一字段使用多个值(问题
#658
)。
版本 0.9.7
(错误修复发布,发布日期待定)
- 修复
werkzeug.debug.tbtools
中的 unicode 问题。 - 修复
werkzeug.posixemulation
中的 Python 3 兼容性问题。 ImmutableList
的致命错字向后移植修复(问题#492
)。- 为
FileSystemCache
原子创建缓存目录(问题#468
)。 - 使用本机字符串作为 memcached 键与 Python 3 客户端一起使用(问题
#539
)。 - 修复
werkzeug.debug.tbtools.Frame
对象的字符集检测(问题#547
和#532
)。 - 修复
werkzeug.utils.import_string
中的AttributeError
掩蔽(问题#182
)。 - 显式关闭服务器(问题
#519
)。 - 修复大于 2592000 的超时在
werkzeug.contrib.cache.MemcachedCache
(问题#533
)中被误解为 UNIX 时间戳的问题。 - 修复
werkzeug.exceptions.abort
会引发预期类的任意子类的错误(问题#422
)。 - 修复损坏的
jsrouting
(由于移除了werkzeug.templates
) werkzeug.urls.url_fix
现在不会在格式错误的 URL 上崩溃,但会返回未修改的 URL。 这是#582
的廉价解决方法,正确的修复包含在 0.10 版中。werkzeug.wrappers.Request
的 repr 不再在非 ASCII 值上崩溃(拉取请求#466
)。- 修复
cache.RedisCache
与redis.StrictRedis
对象结合时的错误(拉取请求#583
)。 WWW-Authenticate
标头的qop
参数现在总是按照 RFC 2617(问题#633
)的要求被引用。- 使用 Python 3 修复
werkzeug.contrib.cache.SimpleCache
中的错误,其中添加/设置在从缓存中修剪旧条目时可能会引发异常(拉请求#651
)。
版本 0.9.6
(错误修复版本,于 2014 年 6 月 7 日发布)
- 添加了从 IRI 到 URI 转换的安全转换,并在内部使用它来解决与
itms-service
等协议的规范违规问题。
版本 0.9.7
- 修复了 uri_to_iri() 不重新编码查询字符串参数中的哈希值。
版本 0.9.5
(错误修复版本,于 2014 年 6 月 7 日发布)
- 将字符集参数从请求对象转发到环境构建器。
- 修复了多部分数据中缺失边界的错误处理。
- 修复了在没有
os.urandom()
的系统上创建会话的问题。 - 修复了未正确 URL 编码的字典键中的加号。
- 修复了 deepcopy 不适用于多字典的问题。
- 修复了重定向的双引号问题。
- 修复了 unicode 键出现在 2.x 上的标题中的问题。
- 修复了测试构建器中 unicode 字符串的错误。
- 修复了 WSGI 分析器中 Python 3 上的 unicode 错误。
- 修复了 Python 2.7.7 和 Python 3.4 上的安全字符串比较函数的问题。
版本 0.9.4
(错误修复版本,于 2013 年 8 月 26 日发布)
- 修复了 Python 3.3 的问题和 cookie 解析中的边缘情况。
- 修复了未通过 WSGI 解码舞蹈正确处理的解码错误。
- 修复了 URI 到 IRI 转换错误地解码百分号的问题。
版本 0.9.3
(错误修复版本,于 2013 年 7 月 25 日发布)
将请求类的
data
描述符的行为恢复为 0.9 之前的行为。 这现在也意味着.data
和.get_data()
具有不同的行为。 新代码应始终使用.get_data()
。除此之外,现在有一个
.get_data()
方法的标志,用于控制表单数据解析应该发生的事情,表单解析器将尊重缓存的数据。 这使得处理自定义表单数据更加一致。
版本 0.9.2
(错误修复版本,2013 年 7 月 18 日发布)
- 将 unsafe 参数添加到
url_quote()
。 - 修复了
url_quote_plus()
未正确引用 '+' 的问题。 - 将
RedisCache
的其余部分移植到 Python 3.3。 - 将
MemcachedCache
的剩余部分移植到 Python 3.3 - 修复了 contrib atom 模块中的弃用警告。
- 修复了通过标题字典而不是内容类型参数设置内容类型的回归。
- 为 stdlib 安全字符串比较函数使用正确的名称。
- 修复了
release_local()
文档字符串中的错误引用。 - 修复了在访问
werkzeug.wrappers.BaseResponse.is_streamed
属性时有时会发生的 AttributeError。
版本 0.9.1
(错误修复版本,于 2013 年 6 月 14 日发布)
- 修复了在路由系统或 URL 引用功能的某些部分不再接受整数的问题。
- 修复了 url_quote 无法为单个数字代码点生成正确转义码的问题。
- 修复了
SharedDataMiddleware
无法正确读取路径并在某些情况下中断 etag 生成的问题。 - 在开发服务器中正确处理 Expect: 100-continue 以解决 curl 问题。
- 在请求关闭时自动耗尽输入流。 这应该解决不接触请求文件导致超时的问题。
- 如果将非限制流传递到多部分解析器,则修复了流的耗尽不执行任何操作。
- 提高了多部分解析器的缓冲区大小。
0.9 版
于 2013 年 6 月 13 日发布,代号为 Planierraupe。
- 在有限的流上增加了对
tell()
的支持。 ETags
现在非零,如果它包含至少一个任何类型的 etag,包括弱 etag。- 为 SSL 服务器的 stdlib 中的错误添加了解决方法。
- 改进了 devserver 的 SSL 接口,以便它可以轻松生成证书并从文件中加载它们。
- 重构测试客户端以调用类上的 open 方法进行重定向。 这使得子类化更加强大。
werkzeug.wsgi.make_chunk_iter()
和werkzeug.wsgi.make_line_iter()
现在支持迭代器和流的处理。- 路由系统生成的 URL 现在不再引用
+
。 - URL 修复现在不再引用某些保留字符。
werkzeug.security.generate_password_hash()
和 check 函数现在支持任何 hashlib 算法。- wsgi.get_current_url 现在对于在查询字符串中发送非 ascii 数据的浏览器来说是 ascii 安全的。
- 改进了
werkzeug.http.parse_options_header()
的解析行为 - 向本地代理添加了更多运算符。
- 添加了一个钩子来覆盖路由系统中的默认转换器。
- HTTP 异常的描述字段现在总是被转义。 使用标记对象来禁用它。
- 向代理修复添加了代理参数的数量,以使其在常见代理设置中更加安全。 默认情况下,它将不再像以前那样信任 x-forwarded-for 标头。
- 添加了对 URI/IRI 函数中的片段处理的支持。
- 添加了对
werkzeug.http.parse_dict_header()
的自定义类支持。 - 将 LighttpdCGIRootFix 重命名为 CGIRootFix。
- 在修复 URL 时,始终将 + 视为安全,因为人们喜欢滥用它们。
- 添加了对在 contrib 分析器中的目录进行分析的支持。
- 转义函数现在默认转义引号。
- 将异常的代表更改为不那么神奇。
- 简化的异常接口不再需要传递环境来接收响应对象。
- 向 IterIO 对象添加了哨兵参数。
- 添加了对安全模块的 pbkdf2 支持。
- 添加了一个简单的请求类型,禁用所有表单解析,只留下流。
- 删除了对已弃用的 fix_headers 的支持。
- 删除了对已弃用的 header_list 的支持。
- 删除了对 iter_encoded 的弃用参数的支持。
- 删除了对受限流对象的弃用非静默使用的支持。
- 删除了对缓存属性上先前虚拟 可写 参数的支持。
- 添加了对显式关闭请求对象以关闭关联资源的支持。
- 条件请求处理或对响应数据属性的访问不再忽略直接传递模式。
- 删除了 werkzeug.templates 和 werkzeug.contrib.kickstart。
- 更改了转发主机的主机查找逻辑,以允许主机列表,在这种情况下,仅选取第一个。
- 添加 wsgi.get_query_string、wsgi.get_path_info 和 wsgi.get_script_name 并制作 wsgi.pop_path_info 和 和 X168X] 函数执行 unicode 解码。 这对于避免在 Python 3 上暴露 WSGI 编码舞蹈是必要的。
- 将 content_encoding 和 content_md5 添加到请求对象的公共请求描述符混合中。
- 向测试客户端添加了 options 和 trace。
- 彻底检查了输入流的利用率,使其更易于使用和更好地扩展。 通过检测内容类型标头而不是请求方法,输入端的内容有效负载检测现在更符合 HTTP。 这现在也意味着请求类上的流属性始终可用,而不仅仅是在解析失败时。
- 添加了对在 with 语句中使用
werkzeug.wrappers.BaseResponse
的支持。 - 更改 get_app_iter 以尽早获取响应,以便在包装响应可迭代时不会失败。 这使得过滤更容易。
- 引入了 get_data 和 set_data 响应方法。
- 为请求引入了 get_data。
- Soft 弃用了用于请求和响应对象的 data 描述符。
- 向某些标头添加了 as_bytes 操作,以简化对 cookie 等内容的处理。
- 将调试器粘贴回溯作为私有粘贴到 github 的要点服务中。
版本 0.8.4
(错误修复发布,发布日期待公布)
- 向调试器添加了一个图标,该图标修复了通过对 Google Chrome 中的 /favicon.ico 的请求触发状态更改的问题。 这应该可以解决 Flask 和其他框架的一些问题,这些框架在堆栈上使用上下文本地对象并在错误时保留上下文。
- 修复了在调试器中向上滚动的问题。
- 修复了调试器在与 URL 根不同的 URL 上运行的问题。
- 修复了代理没有正确转发一些很少使用的特殊方法的问题。
- 添加了一种解决方法,以防止 Chrome 的 XSS 保护破坏调试器。
- 如果 redis 未运行,则跳过 redis 测试。
- 修复了多部分解析器中导致内容类型无法正确获取的拼写错误。
版本 0.8.3
(错误修复版本,于 2012 年 2 月 5 日发布)
- 修复了
werkzeug.wsgi.make_line_iter()
的另一个问题,其中没有正确处理长于缓冲区大小的行。 - 调试控制台执行完毕后恢复标准输出,以便调试器可以更好地在 GAE 上使用。
- 修复了 int 子类的 redis 缓存错误(影响 bool 缓存)。
- 修复了来自不受信任来源的重定向目标的 XSS 问题。
- Redis 缓存后端现在支持密码认证。
版本 0.8.2
(错误修复版本,于 2011 年 12 月 16 日发布)
- 修复了内置服务器的请求处理未正确响应套接字错误的问题。
- 现在可以正确使用路由请求重定向异常的代码属性。
- 修复了在 Windows 上关闭的错误。
- 修复了在 URL 规则中硬编码非 ascii 字符的一些 unicode 问题。
- 修复了分配给 fdel 而不是
__doc__
的两个属性文档字符串。 - 修复了 CRLF 行尾可能被 line iter 函数一分为二,导致分段文件上传出现问题的问题。
版本 0.8.1
(错误修复版本,于 2011 年 9 月 30 日发布)
- 修复了内存缓存无法正常工作的问题。
- 修复了 Python 2.7.1 及更高版本的一个问题,该问题破坏了使用
copy.copy()
的多字典复制。 - 针对替代 Python 实现的潜在问题,更改了不可变有序多字典的散列方法。
版本 0.8
2011 年 9 月 29 日发行,代号 Lötkolben
- 删除了通用的数据结构特定的 KeyErrors
BadRequestKeyError
。 - 记录在案
werkzeug.wrappers.BaseRequest._load_form_data()
。 - 路由系统现在还接受字符串而不是 query_args 参数的字典,因为我们只是将它们传递给重定向。
- 出于效率和简单的原因,当设置
data
属性时,Werkzeug 现在会立即自动设置内容长度。 - 路由系统现在会将服务器名称规范化为小写。
- 如果服务器名称的配置不正确,路由系统将不再引发 ValueErrors。 这应该会使部署更容易,因为您现在可以忽略该因素。
- 修复了解析 HTTP 摘要标头的错误。 它拒绝了缺少 nc 和 nonce 参数的标头。
- 代理修复现在还基于 X-Forwarded-Proto 更新 wsgi.url_scheme。
- 添加了对 redis 缓存的键前缀的支持。
- 添加了抑制包装器中某些自动更正的功能,这些包装器现在通过响应对象上的 autocorrect_location_header 和 automatically_set_content_length 进行控制。
- Werkzeug 现在使用一种新方法来检查传入数据的长度是否完整,如果服务器失败,它将自行引发 IO 错误。
make_line_iter()
现在需要一个不高于流可以提供的长度的限制。- 将表单解析重构为表单解析器类,从而可以挂钩解析过程的各个部分以进行调试和扩展。
- 对于条件响应,当内容长度已经存在时不再设置,如果丢失则添加。
- 不可变数据结构现在是可散列的。
- 标头数据结构不再允许在值中换行以避免标头注入攻击。
- 通过子类化可以在代理修复中选择不同的远程地址。
- 添加了基于流的 URL 解码。 这减少了对 URL 解码的大型传输表单数据的内存使用,因为 Werkzeug 将不再将所有未解析的数据加载到内存中。
- Memcache 客户端现在不再使用有问题的 cmemcache 模块并支持 pylibmc。 GAE 不会自动尝试,不再需要专用类。
- Redis 缓存现在可以正确序列化数据。
- 删除了对 Python 2.4 的支持
版本 0.7.2
(错误修复版本,于 2011 年 9 月 30 日发布)
- 修复了调试器的 CSRF 问题。
- 调试器现在正在对 Lodgeit 生成私有粘贴。
- 如果 URL 映射现在绑定到环境,则查询参数会从中正确解码以进行重定向。
版本 0.7.1
(错误修复版本,于 2011 年 7 月 26 日发布)
- 修复了较新版本 IPython 的问题。
- 禁用基于 pyinotify 的重新加载器,它不能可靠地工作。
版本 0.7
2011 年 7 月 24 日发行,代号 Schraubschlüssel
- 向 Werkzeug 缓存抽象层添加对 python-libmemcached 的支持。
- 改进了
url_decode()
和url_encode()
的性能。 - 修复了通过 pkg_resources 加载时 SharedDataMiddleware 可能在奇怪的路径上导致内部服务器错误的问题。
- 修复了 URL 生成错误,如果生成的组件包含冒号,则该错误会导致 URL 无效。
werkzeug.import_string()
现在可以正确处理部分设置的包。- 由于其引起的问题,在开发服务器上禁用了 IPv6 的自动套接字切换。
- 在创建条件 HTTP 响应时,Werkzeug 不再覆盖 Date 标头。
- 路由系统提供了一种方法来检索给定路径的匹配方法。
- 路由系统现在接受一个参数来改变编码错误行为。
- 本地管理器现在可以在构造函数中接受自定义的 ident 函数,这些函数被转发到包装的本地对象。
- url_unquote_plus 现在再次接受 unicode 字符串。
- 修复了文件系统会话支持的修剪功能和并发使用的问题。
- 修复了丢弃端口的外部 URL 生成问题。
- 向 Werkzeug 缓存抽象层添加了对 pylibmc 的支持。
- 修复了新的多部分解析器的一个问题,当换行碰巧在块限制上时会发生这个问题。
- 如果正在使用端口,现在可以正确设置 Cookie。 如果尝试为没有点的域设置 cookie,则会引发运行时错误。
- 修复了 Template.from_file 不适用于文件描述符的问题。
- 重载器现在可以使用 inotify 来跟踪重载。 这需要安装 pyinotify 库。
- Werkzeug 调试器现在可以提交到自定义的提交安装。
- 重定向函数的状态代码断言现在允许将 201 用作重定向代码。 虽然它不是真正的重定向,但它与重定向的共享足以使该功能仍然有用。
- 修复了 pypy 的 securecookie。
- 修复了在提供无效用户数据时在 MIMEAccept 对象上调用 best_match 时引发的 ValueErrors。
- 弃用 werkzeug.contrib.kickstart 和 werkzeug.contrib.testtools
- URL 路由现在可以传递 URL 参数以保留它们以进行重定向。 将来也可以匹配 URL 参数。
- 标头编码从 utf-8 更改为 latin1 以支持到 Python 3 的端口。 传递给对象的字节串保持不变,这使得拥有 utf-8 cookie 成为可能。 这是 Python 3 版本稍后将更改的部分,因为它将始终对 latin1 值进行操作。
- 修复了表单解析器中的一个错误,如果使用多部分数据中的某些值,该错误会导致最后一个字符被删除。
- Multipart 解析器现在查看 part-individual 内容类型标头以覆盖全局字符集。
- 为文件存储对象引入了 mimetype 和 mimetype_params 属性。
- 更改了 FileStorage 文件名回退逻辑以跳过 Python 用于标记特殊文件(如 stdin)的特殊文件名。
- 引入了更多的 HTTP 异常类。
- call_on_close 现在可以用作装饰器。
- 支持 redis 作为缓存后端。
- 添加了 BaseRequest.scheme。
- 支持 RFC 5789 PATCH 方法。
- 新的自定义路由解析器和更好的排序。
- 删除了对 is_behind_proxy 的支持。 改用 WSGI 中间件,根据您的设置重写 REMOTE_ADDR。 另请参阅
werkzeug.contrib.fixers.ProxyFix
以获取插入式替换件。 - 向测试客户端添加了 cookie 伪造支持。
- 在路由系统中添加了对基于主机的匹配的支持。
- 从默认的“忽略”切换到更好的“替换”unicode 错误处理模式。
- 内置服务器现在将一个名为“werkzeug.server.shutdown”的函数添加到 WSGI 环境中以启动关闭。 这目前仅适用于 Python 2.6 及更高版本。
- 现在假设标头为 latin1,以便在我们获得支持后与 Python 3 更好地兼容。
- 添加了
werkzeug.security.safe_join()
。 - 添加了 accept_json 属性,类似于
werkzeug.datastructures.MIMEAccept
上的 accept_html。 werkzeug.utils.import_string()
现在失败,错误消息更好,可以指出问题。- 添加了对解析 If-Range 标头(
werkzeug.http.parse_if_range_header()
和werkzeug.datastructures.IfRange
)的支持。 - 添加了对解析 Range 标头(
werkzeug.http.parse_range_header()
和werkzeug.datastructures.Range
)的支持。 - 添加了对解析响应的 Content-Range 标头的支持,并为其提供了一个访问器对象(
werkzeug.http.parse_content_range_header()
和werkzeug.datastructures.ContentRange
)。
版本 0.6.2
(错误修复版本,于 2010 年 4 月 23 日发布)
- 将请求对象的属性 implicit_seqence_conversion 重命名为 implicit_sequence_conversion。
版本 0.6.1
(错误修复版本,于 2010 年 4 月 13 日发布)
- 大大改进了本地对象。 现在应该选择独立的 greenlet 构建并支持免费调用的代理。 现在还有一个堆栈本地,它可以通过将当前请求/响应推送到堆栈顶部来从自身内部调用相同的应用程序。
- 如果没有提供方法,路由构建方法也会正确构建非默认方法规则。
- 为内置服务器添加了适当的 IPv6 支持。
- Windows 特定文件系统会话存储修复。 (现在高并发下应该更稳定了)
- 修复了会话系统中的 NameError。
- 修复了 werkzeug.script 系统中带有空参数的错误。
- 修复了一个错误,如果应用程序使用
logging.basicConfig()
(#499),日志行将被复制 - 添加了安全密码散列和检查功能。
- 如果存在 GET,则 HEAD 现在被隐式添加为路由系统中的方法。 不这样做被认为是一个错误,因为代码通常假设情况就是这样,并且在不将 HEAD 标准化为 GET 的 Web 服务器中,这可能会破坏 HEAD 请求.
- 脚本支持现在可以启动 SSL 服务器。
版本 0.6
2010 年 2 月 19 日发行,代号 Hammer。
- 删除待处理的弃用
- sys.path 现在从 testapp 打印出来。
- 修复了 RFC 2068 与 cookie 值引用不兼容的问题。
FileStorage
现在可以访问多部分标头。- cached_property.writeable 已被弃用。
MapAdapter.match()
现在接受 return_rule 关键字参数,该参数返回匹配的 Rule 而不仅仅是 端点- 如果地图绑定到无效的 WSGI 环境,
routing.Map.bind_to_environ()
现在会引发更正确的错误消息。 - 向内置开发服务器添加了对 SSL 的支持。
- 当响应对象被评估为 WSGI 应用程序时,它们不再被修改。 为了向后兼容,fix_headers 函数仍然会被调用,以防它被覆盖。 但是,如果您需要在发送响应之前修改标头,您应该将您的应用程序更改为使用 get_wsgi_headers,因为向后兼容性支持将在未来版本中消失。
append_slash_redirect()
不再要求 QUERY_STRING 位于 WSGI 环境中。- 添加了
DynamicCharsetResponseMixin
- 添加了
DynamicCharsetRequestMixin
- 添加了
BaseRequest.url_charset
- 请求和响应对象现在有一个默认的 __repr__。
- 现在可以腌制内置数据结构。
- 表单数据解析器现在将查看文件名而不是内容类型,以确定它是否应该将上传视为常规表单数据或文件上传。 这修复了谷歌浏览器的错误。
- 改进了 make_line_iter 和用于二进制上传的多部分解析器的性能。
- 固定
is_streamed
- 修复了 EnvironBuilder 中的路径引用错误,该错误导致 PATH_INFO 和 SCRIPT_NAME 在未引用的环境中结束。
werkzeug.BaseResponse.freeze()
现在设置内容长度。- 对于未知的 HTTP 方法,请求流现在总是受到限制而不是空的。 这使得在 Werkzeug 之上实现 DAV 和其他协议变得更加容易。
- 添加了
werkzeug.MIMEAccept.best_match()
- 现在支持来自标准字典的多值测试客户端帖子。 以前您必须使用多字典。
- 规则模板现在可以与子挂载、子域和其他规则工厂一起正常工作。
- 弃用
werkzeug.LimitedStream
的非静默用法。 - 为 Werkzeug 的许多部分添加了对 IRI 处理的支持。
- 开发服务器现在正确登录到 werkzeug 记录器。
- 添加了
werkzeug.extract_path_info()
- 修复了
url_fix()
中的查询字符串引用错误 - 将 fallback_mimetype 添加到
werkzeug.SharedDataMiddleware
。 - 不推荐使用
BaseResponse.iter_encoded()
的字符集参数。 - 添加了
BaseResponse.make_sequence()
、BaseResponse.is_sequence
和BaseResponse._ensure_sequence()
。 - 添加了
werkzeug.Map
更好的 __repr__ - import_string 现在也接受 unicode 字符串。
- 开发服务器不会在主机名后出现双斜杠。
- 更好的 __repr__ 和 __str__ 的
werkzeug.exceptions.HTTPException
- 测试客户端现在可以使用多个 cookie 正常工作。
werkzeug.routing.Map
现在有一个带有默认转换器映射的类属性。 这有助于子类覆盖转换器而不将它们传递给构造函数。- 已实现
OrderedMultiDict
- 改进了会话支持,以便在文件系统上更有效地存储会话。 还增加了对当前存储在文件系统会话存储中的会话列表的支持。
- werkzeug 不再使用 Python 时间模块进行解析,这意味着可以解析更广泛范围内的日期。
- 包装器没有可以交换它使用的字典和列表类型的类属性。
- werkzeug 调试器现在应该可以在 appengine 开发服务器上运行了。
- URL 构建器现在支持删除意外参数。 以前,它们总是作为查询字符串附加到 URL 中。
- 探查器现在写入正确的流。
版本 0.5.1
(0.5 的错误修复版本,于 2009 年 7 月 9 日发布)
FileStorage
的固定布尔检查- url 路由系统现在正确支持 unicode URL 规则。
- 文件上传流不再需要提供 truncate() 方法。
- 已实现
BaseRequest._form_parsing_failed()
。 - 固定 #394
ImmutableDict.copy()
、ImmutableMultiDict.copy()
和ImmutableTypeConversionDict.copy()
返回可变浅拷贝。- 修复了 make_runserver 脚本操作的错误。
MultiDict.items()
和MutiDict.iteritems()
现在接受一个参数来为每个键的每个值返回一对。- 多部分解析器现在可以更好地处理手工制作的多部分请求,因为添加了额外的换行符。 这修复了 setuptools 上传未正确处理的错误 (#390)
- 修复了原子馈送生成器中的一些小错误。
- 修复了客户端 cookie 标头解析区分大小写的错误。
- 修复了不工作的弃用警告。
SharedDataMiddleware
的固定包加载。- 修复了安全 cookie 中的一个错误,该错误导致本地时间未设置为 UTC 的服务器上的服务器端过期是不可能的。
- 交互式调试器的固定控制台。
版本 0.5
4 月 24 日发布,代号 Schlagbohrer。
- 现在需要 Python 2.4
- 修复了
IterIO
中的错误 - 添加了
MIMEAccept
和CharsetAccept
,它们的工作方式与常规Accept
类似,但对 mimetypes 和字符集有额外的特殊规范化和额外的便利方法。 - 将服务系统从 wsgiref 切换到自制软件。
Client
现在支持 cookie。- 添加了
fixers
模块,其中包含针对网络服务器错误和托管设置副作用的各种修复。 - 添加了
werkzeug.contrib.wrappers
- 添加了
is_hop_by_hop_header()
- 添加了
is_entity_header()
- 添加了
remove_hop_by_hop_headers()
- 添加了
pop_path_info()
- 添加了
peek_path_info()
- 添加了
wrap_file()
和FileWrapper
- 将 LimitedStream 从 contrib 包移动到常规的 werkzeug 包中,并更改了默认行为以引发异常而不是在没有警告的情况下停止。 旧类将一直留在模块中,直到 0.6。
- 实现了实验性多部分解析器,取代了旧的 CGI hack。
- 添加了
dump_options_header()
和parse_options_header()
- 添加了
quote_header_value()
和unquote_header_value()
url_encode()
和url_decode()
现在接受一个分隔符参数来切换 & 和 ; 作为对分隔符。 魔法开关不再存在。- 所有表单数据解析函数以及
BaseRequest
对象都有参数(或属性)来限制传入字节的数量(全部或每个字段)。 - 添加了
LanguageAccept
- 现在强制请求对象对所有集合都是只读的。
- 添加了许多新的集合类,总体上重构了集合。
- 测试支持被重构,半未记录的 werkzeug.test.File 被替换为
werkzeug.FileStorage
。 - 添加了
EnvironBuilder
并统一了之前不同的create_environ()
、Client
和BaseRequest.from_values()
。 他们现在都一样工作,这不那么令人困惑。 - 官方记录从内部模块导入的未定义行为。 这些模块从未公开为公共接口。
- 删除了 FileStorage.__len__ 以前使浏览器不发送所有浏览器所做的内容长度的对象为假。
SharedDataMiddleware
现在使用 wrap_file 并具有可配置的缓存超时。- 添加了
CommonRequestDescriptorsMixin
- 添加了
CommonResponseDescriptorsMixin.mimetype_params
- 添加了
werkzeug.contrib.lint
- 将 passthrough_errors 添加到 run_simple。
- 添加了 secure_filename
- 添加了
make_line_iter()
MultiDict
现在复制而不是向调用者显示 getlist 和返回列表的迭代函数的内部列表。- 在
Client
的open()
中添加了follow_redirect
。 - 在
make_runserver()
中添加了对 extra_files 的支持
版本 0.4.1
(修正版本,于 2009 年 1 月 11 日发布)
- werkzeug.contrib.cache.Memcached 现在接受实现 memcache.Client 接口的对象作为具有服务器地址的字符串列表的替代。 现在还有一个 GAEMemcachedCache 连接到 Google appengine 缓存。
- 现在显式地将密钥转换为字节串,因为 Python 2.6 不再这样做。
- url_encode 和所有调用它的接口,现在支持选项排序,但默认情况下是禁用的。
- 开发服务器不再解析客户端的地址。
- 修复了 werkzeug.test 中的一个打错了 File 的错字。
- Map.bind_to_environ 现在使用 Host 标头(如果可用)。
- 修复 BaseCache.get_dict (#345)
- werkzeug.test.Client 现在可以运行缓冲的应用程序,在这种情况下应用程序会自动正确关闭。
- 修复了 Headers.set (#354)。 之前导致标题重复。
- 修复了 Headers.pop (#349)。 未正确处理默认参数。
- 修复 create_environ 中的 UnboundLocalError (#351)
- Headers 现在更兼容 wsgiref。
- Template.render 现在接受 multidicts。
- 放弃对 Python 2.3 的支持
版本 0.4
2008 年 11 月 23 日发行,代号 Schraubenzieher。
- Client 现在支持一个空的 data 参数。
- 修复了 Response.application 中无法将其用作方法装饰器的错误。
- 会话系统现在应该可以在 appengine 上运行了
- 安全 cookie 现在可以在具有不同 CPU 架构的负载平衡环境中正常工作。
- CacheControl.no_cache 和 CacheControl.private 行为已更改以反映 HTTP RFC 的可能性。 将这些属性设置为 None 或 True 现在会将值设置为“空值”。 文档中的更多详细信息。
- 固定 werkzeug.contrib.atom.AtomFeed.__call__。 (#338)
- BaseResponse.make_conditional 现在总是返回 self。 以前它没有用于发布请求等。
- 修复了 html 和 xhtml 布尔属性处理中的错误。
- 向调试器 pastebin 功能添加了优雅的错误处理。
- 向 Headers 添加了更多类似界面的列表(切片和索引现在有效)
- 修复了 Headers 的 __setitem__ 方法的错误,该错误在替换时未正确删除所有键。
- 添加了 remove_entity_headers,它从标题列表(或 Headers 对象)中删除所有实体标题
- 如果状态代码为 304,响应现在会自动调用 remove_entity_headers。
- 修复了 Href 查询参数处理的错误。 以前,如果调用 Href 的最后一项是 dict,则无法正确处理它。
- 标头现在支持 pop 操作以更好地处理环境属性。
版本 0.3.1
(错误修复版本,于 2008 年 6 月 24 日发布)
- 修复了 werkzeug.contrib.SecureCookie 的安全问题。
版本 0.3
2008 年 6 月 14 日发布,代号 EUR325CAT6。
- 添加了对 url 路由重定向的支持。
- 添加了授权和授权Mixin
- 添加了 WWWAuthenticate 和 WWWAuthenticateMixin
- 添加 parse_list_header
- 添加 parse_dict_header
- 添加了 parse_authorization_header
- 添加了 parse_www_authenticate_header
- 将 _get_current_object 方法添加到 LocalProxy 对象
- 添加 parse_form_data
- MultiDict、CombinedMultiDict、Headers 和 EnvironHeaders 现在引发特殊的关键错误,它们是 BadRequest 的子类,所以如果你没有抓住它们,它们会给出有意义的 HTTP 响应。
- 添加了对替代编码错误处理的支持以及新的 HTTPUnicodeError(如果没有被捕获),其行为类似于 BadRequest。
- 添加了 BadRequest.wrap。
- 向 SharedDataMiddleware 添加了 ETag 支持,并添加了禁用缓存的选项。
- 修复了请求对象上的 is_xhr。
- 修复了 url 适配器的 dispatch 方法的错误处理。 (#318)
- 修复了 SharedDataMiddleware 的错误。
- 固定 接受值 。
- EnvironHeaders 现在包含内容类型和内容长度
- url_encode 将传递给它的字典中的列表和元组视为同一个键的多个值,这样就不必将 MultiDict 传递给函数。
- 添加了 validate_arguments
- 添加了 BaseRequest.application
- 改进的 Python 2.3 支持
- run_simple 现在接受 use_debugger 和 use_evalex 参数,如脚本模块中的 make_runserver 工厂函数。
- environ_property 现在默认是只读的
- 现在可以将请求初始化为“浅”请求,如果请求对象尝试使用输入流,这会导致运行时错误。
0.2版
2008 年 2 月 14 日发布,代号 Faustkeil。
- 在路由系统中添加了 AnyConverter。
- 添加 werkzeug.contrib.securecookie
- 异常有一个
get_response()
方法返回一个响应对象 - 修复了路径排序错误(#293),感谢 Thomas Johansson
- BaseReporterStream 现在是 werkzeug contrib 模块的一部分。 从 Werkzeug 0.3 开始,您必须从那里导入它。
- 添加了 DispatcherMiddleware。
- RequestRedirect 现在是 HTTPException 的子类,并使用 301 状态代码而不是 302。
- url_encode 和 url_decode 现在也可以选择将键视为 unicode 字符串。
- werkzeug.script 现在对布尔参数有不同的调用者格式。
- 将 lazy_property 重命名为 cached_property。
- 添加了 import_string。
- 添加 is_* 属性来请求对象。
- 在路由规则中添加了 empty() 方法。
- 添加了 werkzeug.contrib.profiler。
- 将 扩展 添加到 标题 。
- 添加了 dump_cookie 和 parse_cookie。
- 将 as_tuple 添加到 客户端 。
- 添加了 werkzeug.contrib.testtools。
- 添加 werkzeug.unescape
- 添加了 BaseResponse.freeze
- 添加了 werkzeug.contrib.atom
- HTTPExceptions 现在接受一个参数 description,它会覆盖默认描述。
- MapAdapter 现在有一个默认的路径信息。 如果您使用 bind_to_environ,则以后不必传递路径。
- werkzeug 用于开发服务器的 wsgiref 子类不再使用直接的 sys.stderr 日志记录,而是使用一个名为“werkzeug”的记录器。
- 已实现 Href。
- 已实现 find_modules
- 将请求和响应对象重构为基础对象、mixin 和实现所有 mixin 的全功能子类。
- 添加了简单的用户代理解析器
- 如果 werkzeug 的路由匹配规则但用于不同的方法,则现在提出 MethodNotAllowed。
- 许多修复和小改进
版本 0.1
2007 年 12 月 9 日发布,代号 Wictorinoxger。
- 初始版本