变化

版本3.0.0

未发布的

  • 删除以前弃用的代码。 #2768

  • 不推荐使用 __version__ 属性。使用特征检测,或 importlib.metadata.version("werkzeug") ,而不是。 #2770

  • generate_password_hash uses scrypt by default. #2769

版本2.3.8

未发布的

版本2.3.7

已发布2023-08-14

  • 使用 flit_core 而不是 setuptools 作为构建后端。

  • 修复了对多部分正文的解析。 #2734 调整数据开始处最后一个换行符的索引。 #2761

  • 从标头值解析整型时,首先去掉空格。 #2734

  • 修复测试时的空文件流问题。 #2740

  • 当URL规则不是以斜杠开头时,更清晰的错误消息。 #2750

  • Accept q value can be a float without a decimal part. #2751

版本2.3.6

已发布2023-06-08

  • FileStorage.content_length does not fail if the form data did not provide a value. #2726

版本2.3.5

已发布2023-06-07

  • 与Python3.12兼容。 #2704

  • 修复中对无效Base64值的处理 Authorization.from_header#2717

  • 调试器转义页标题中的异常消息。 #2719

  • 在绑定时 routing.Map ,长长的Idna server_name 带有端口的编码不会失败。 #2700

  • iri_to_uri shows a deprecation warning instead of an error when passing bytes. #2708

  • 在解析HTTP请求标头中的数字时,如 Content-Length ,则只接受ASCII数字,而不接受任何 intfloat 接受吧。 #2716

版本2.3.4

已发布2023-05-08

  • Authorization.from_header and WWWAuthenticate.from_header detects tokens that end with base64 padding (=). #2685

  • 删除的用法 warnings.catch_warnings#2690

  • 移除 max_form_parts 限制标准格式数据分析,仅在用于多部分内容时使用。 #2694

  • Response will avoid converting the Location header in some cases to preserve invalid URL schemes like itms-services. #2691

版本2.3.3

已发布2023-05-01

  • 修复了大型多部分正文的解析。删除无效的前导换行符,并恢复解析速度。 #2658, #2675

  • 曲奇 Path attribute is set to / by default again, to prevent clients from falling back to RFC 6265's `` 默认路径``行为。 #2672, #2679

版本2.3.2

已发布2023-04-28

  • 解析Cookie Expires 属性在测试客户端中正确使用。 #2669

  • max_content_length can only be enforced on streaming requests if the server sets wsgi.input_terminated. #2668

版本2.3.1

已发布2023-04-27

  • 在构建URL和测试请求时使用百分比编码加号(+)。 #2657

  • Cookie值不会引用RFC 6265中定义的字符。 #2659

  • 包括 pyi 文件用于 datastructures 键入注解。 #2660

  • Authorization and WWWAuthenticate objects can be compared for equality. #2665

版本2.3.0

已发布2023-04-25

  • 放弃对Python3.7的支持。 #2648

  • 删除以前弃用的代码。 #2592

  • 不推荐在需要字符串的位置传递字节,以及 charseterrors 参数在许多地方。任何经过注释、记录或测试以接受字节的地方都会显示警告。从Python2到3的转换过程中消除了这一构件,从而消除了实例检查和编码周期中的大量开销。一般来说,始终使用UTF-8,现代的HTML、URL和HTTP标准都强烈建议您这样做。 #2602

  • 不推荐使用 werkzeug.urls 模块,但 uri_to_iriiri_to_uri 功能。使用 urllib.parse 而是类库。 #2600

  • 根据WhatWG URL标准,更新在URL中使用百分比编码时认为安全的字符。 #2601

  • 更新对下载中的Unicode文件名使用百分比编码时认为安全的字符。 #2598

  • 不推荐使用 safe_conversion 的参数 iri_to_uri 。这个 Location Header使用与其他任何地方相同的过程转换为IRI。 #2609

  • 不推荐使用 werkzeug.wsgi.make_line_itermake_chunk_iter#2613

  • 将现代打包元数据用于 pyproject.toml 而不是 setup.cfg#2574

  • Request.get_json() will raise a 415 Unsupported Media Type error if the Content-Type header is not application/json, instead of a generic 400. #2550

  • URL转换器的 part_isolating 默认为 False 如果它的 regex 包含一个 /#2582

  • 自定义转换器的正则表达式可以在不中断路由器的情况下具有捕获组。 #2596

  • 重载程序可以提取参数以 python 喜欢 -X dev ,并且不需要启发式方法来确定如何重新加载命令。仅在>=3.10的Python上可用。 #2589

  • 看门狗重新加载程序会忽略文件打开事件。将WatchDog的最低版本提高到2.3.0。 #2603

  • 使用Unix套接字作为开发服务器时,路径可以以点开始。 #2595

  • 将PBKDF2的默认工作因子增加到600,000次迭代。 #2611

  • parse_options_header is 2-3 times faster. It conforms to RFC 9110, some invalid parts that were previously accepted are now ignored. #1628

  • 这个 is_filename 参数设置为 unquote_header_value 已弃用。 #2614

  • 不推荐使用 extra_chars 参数并将字节传递给 quote_header_value vt.的. allow_token 参数设置为 dump_header ,而 cls 参数并将字节传递给 parse_dict_header#2618

  • 改进 parse_accept_header 实施。根据以下内容进行解析 RFC 9110 。丢弃无效的项目 q 价值观。 #1623

  • quote_header_value quotes the empty string. #2618

  • dump_options_header skips None values rather than using a bare key. #2618

  • dump_headerdump_options_header 如果键以星号结尾,则不会引用值 *

  • parse_dict_header will decode values with charsets. #2618

  • 重构 AuthorizationWWWAuthenticate 标头数据结构。 #1769#2619

    • 两个班级都有 typeparameters ,以及 token 属性。这个 token 属性支持使用单个不透明令牌而不是 key=value 参数,如 Bearer

    • 两个类都不是 dict 尽管它们仍然实现获取、设置和删除 auth[key]auth.key 语法,以及 auth.get(key)key in auth

    • 两个类都有一个 from_header 类方法。 parse_authorization_headerparse_www_authenticate_header 都已被弃用。

    • 这些方法 WWWAuthenticate.set_basicset_digest 都已被弃用。相反,应该创建一个实例并将其分配给 response.www_authenticate

    • 可以将实例列表分配给 response.www_authenticate 若要设置多个标题值,请执行以下操作。但是,访问该属性仅返回第一个实例。

  • 重构 parse_cookiedump_cookie#2637

    • parse_cookie 速度提高了40%, dump_cookie 速度最高可提高60%。

    • 将字节传递到 parse_cookiedump_cookie 已弃用。这个 dump_cookie charset 参数已弃用。

    • dump_cookie 允许 domain 不包含点的值 . ,并去掉一个前导圆点。

    • dump_cookie 未设置 path="/" 默认情况下不必要的。

  • 重构测试客户端Cookie实现。 #1060, #1680

    • 这个 cookie_jar 属性已弃用。 http.cookiejar 不再用于存储。

    • 在请求中发送Cookie时使用域和路径匹配。这个 domainpath 参数默认为 localhost/

    • 添加了一个 get_cookie 方法来检查Cookie。

    • 曲奇有 decoded_keydecoded_value 属性来匹配应用程序看到的内容,而不是客户端将看到的编码值。

    • 第一个位置 server_name 参数设置为 set_cookiedelete_cookie 已弃用。使用 domain 参数,而不是。

    • 其他参数 delete_cookie 除此之外, domainpath ,以及 value 都已被弃用。

  • 如果 request.max_content_length 则在访问流时以及一般从流读取时立即进行检查,而不是仅在表单分析期间进行检查。 #1513

  • 不得在生产中使用的开发服务器将耗尽高达10 GB或1000个读取的请求流。这允许客户端在以下情况下看到413错误 max_content_length 而不是“连接重置”失败。 #2620

  • 开发服务器丢弃包含下划线的标题键 _ ,因为它们用破折号模棱两可 - 在WSGI中。 #2622

  • secure_filename looks for more Windows reserved file names. #2623

  • 的更新类型批注 best_match 使 default 参数更清晰。 #2625

  • 多部分解析器正确处理空字段。 #2632

  • 这个 Map charset 参数和 Request.url_charset 属性是不推荐使用的。URL中的百分比编码必须始终表示UTF-8字节。无效字节将保留百分比编码,而不是替换。 #2602

  • 这个 Request.charsetRequest.encoding_errorsResponse.charset ,以及 Client.charset 属性已弃用。请求和响应数据必须始终使用UTF-8。 #2602

  • 具有字符集信息的标头值仅允许ASCII、UTF-8和ISO-8859-1。 #2614, #2641

  • 的更新类型批注 ProfilerMiddleware stream 参数。 #2642

  • 使用延迟的批注求值。 #2644

  • 开发服务器在将请求记录到终端之前转义已解码URL中的ASCII控制字符。 #2652

  • 这个 FormDataParser parse_functions 属性和 get_parse_func 方法和无效的 application/x-url-encoded 内容类型,都已弃用。 #2653

  • generate_password_hash supports scrypt. Plain hash methods are deprecated, only scrypt and pbkdf2 are supported. #2654

版本2.2.3

已发布2023/02/14

  • 确保在缺少尾部斜杠时,使用路径转换器的URL规则将使用严格的斜杠进行重定向。 #2533

  • 类型签名用于 get_json 指定在以下情况下返回类型不是可选项 silent=False#2508

  • parse_content_range_header returns None for a value like bytes */-1 where the length is invalid, instead of raising an AssertionError. #2531

  • 剩余地址 ResourceWarning 与所使用的套接字相关 run_simple 。移除 prepare_socket ,现在创建服务器时会发生这种情况。 #2421

  • 更新以下项的现有标头 multipart/form-data 与测试客户端的请求。 #2549

  • 修复对标题扩展参数的处理,使它们不再带引号。 #2529

  • LimitedStream.read works correctly when wrapping a stream that may not return the requested size in one read call. #2558

  • 以开头的Cookie标头 = 被视为空键并被丢弃,而不是剥离前导 ==

  • 指定多部分部件的最大数量,默认为1000,之后 RequestEntityTooLarge 分析时引发异常。这缓解了DoS攻击,在这种情况下,大量的表单/文件部分将导致不成比例的资源使用。

版本2.2.2

已发布2022-08-08

  • 修复路由器以恢复2.1版 strict_slashes == False 叶请求与分支规则匹配的行为,反之亦然。 #2489

  • 修复路由器以识别无效规则,而不是挂起解析它们,并正确解析 / 在转换器参数中。 #2489

  • 更新子程序包导入位置 werkzeug.routing 要使用 import as 显式重新导出公共属性的语法。 #2493

  • 对一些无效标题字符的解析更可靠。 #2494

  • 启动开发服务器时,始终会显示不要在生产部署中使用它的警告。 #2480

  • LocalProxy.__wrapped__ is always set to the wrapped object when the proxy is unbound, fixing an issue in doctest that would cause it to fail. #2485

  • 地址一 ResourceWarning 与所使用的套接字相关 run_simple#2421

版本2.2.1

已发布2022/07/27

  • 修复路由器,以便 /path/ 将匹配一条规则 /path 如果为规则禁用了严格斜杠模式。 #2467

  • 修复路由器,以便不允许部分部分匹配,即 /2df 不匹配 /<int>#2470

  • 修正路由器静态部分权重,使较简单的路由先于较复杂的路由匹配。 #2471

  • 还原 ValidationError 可从…进口 werkzeug.routing#2465

版本2.2.0

已发布2022/07/23

  • 已弃用 get_script_nameget_query_stringpeek_path_infopop_path_info ,以及 extract_path_info#2461

  • 删除以前弃用的代码。 #2461

  • 将MarkupSafe作为依赖项添加,并在呈现HTML时使用它转义值。 #2419

  • 添加了 werkzeug.debug.preserve_context 用于在调试控制台中运行代码时还原请求的上下文本地数据的机制。 #2439

  • 通过确保与Python 3.11的兼容性修复 end_linenoend_col_offset 出现在AST节点上。 #2425

  • 添加基于状态机的新的更快的URL匹配路由器。如果自定义转换器需要与 / 它必须设置类变量 part_isolating = False#2433

  • 修复了禁用严格斜杠时屏蔽分支路径的分支叶路径。 #1074

  • 选项标头中的名称始终转换为小写。这个很匹配 RFC 6266 这件案子并不相关。 #2442

  • AnyConverter validates the value passed for it when building URLs. #2388

  • 调试器在Python3.11中的回溯中显示增强的错误位置。 #2407

  • 添加了SANS-IO is_resource_modifiedparse_cookie 基于WSGI版本的函数。 #2408

  • 添加了SANS-IO get_content_length 功能。 #2415

  • 不要假设测试响应是MIMETYPE。 #2450

  • 类型检查 FileStorage 接受 os.PathLike#2418

版本2.1.2

已发布2022-04-28

  • 开发服务器未设置 Transfer-Encoding: chunked 用于1XX、204、304和HEAD响应。 #2375

  • 异常和重定向的响应HTML以 <!doctype html><html lang=en>#2390

  • 修复能力以设置一些 cache_control 属性至 False#2379

  • 禁用 keep-alive 开发服务器中的连接,而这些连接不受Python的 http.server#2397

版本2.1.1

已发布2022-04-01

  • ResponseCacheControl.s_maxage converts its value to an int, like max_age. #2364

版本2.1.0

已发布2022-03-28

  • 放弃对Python3.6的支持。 #2277

  • 使用GEvent或Eventlet需要greenlet>=1.0或PyPy>=7.3.7。 werkzeug.localscontextvars 将不能在旧版本中正常工作。 #2278

  • 删除以前弃用的代码。 #2276

    • 剔除非标准 shutdown 在运行开发服务器时从WSGI环境中执行函数。有关替代方案,请参阅文档。

    • 请求和响应混合都已合并到 RequestResponse 上课。

    • 用户代理解析器和 useragents 模块已移除。这个 user_agent 模块提供了一个接口,可以将其子类化以添加解析器,如UA-Parser。默认情况下,它只存储整个字符串。

    • 测试客户端返回 TestResponse 实例,不能再将其视为元组。所有数据都作为响应的属性可用。

    • 移除 locals.get_ident 和相关的线程本地代码从 locals ,当转移到基于上下文变量的实现时,它不再有意义。

    • 移除 python -m werkzeug.serving CLI。

    • 这个 has_key 一些映射数据结构上的方法;使用 key in data 取而代之的是。

    • Request.disable_data_descriptor 被移除,通过 shallow=True 取而代之的是。

    • 移除 no_etag 参数来自 Response.freeze()

    • 移除 HTTPException.wrap 类方法。

    • 移除 cookie_date 功能。使用 http_date 取而代之的是。

    • 移除 pbkdf2_hexpbkdf2_bin ,以及 safe_str_cmp 功能。在以下位置使用等效项 hashlibhmac 而是模块。

    • 移除 Href 班级。

    • 移除 HTMLBuilder 班级。

    • 移除 invalidate_cached_property 功能。使用 del obj.attr 取而代之的是。

    • 移除 bind_argumentsvalidate_arguments 。使用 Signature.bind()inspect.signature() 取而代之的是。

    • 移除 detect_utf_encoding ,它内置到 json.loads

    • 移除 format_string ,使用 string.Template 取而代之的是。

    • 移除 escapeunescape 。改用MarkupSafe。

  • 这个 multiple 的参数 parse_options_header 已弃用。 #2357

  • 依赖于 PEP 538PEP 540 来处理使用正确的文件系统编码对文件名进行解码。这个 filesystem 模块已移除。 #1760

  • 传递给的默认值 Headers 验证方式与稍后添加的值相同。 #1608

  • 设置 CacheControl Int属性,如 max_age 会将该值转换为整型。 #2230

  • 始终使用 socket.fromfd 重新启动开发服务器时。 #2287

  • 将URL值的字典传递给 Map.build ,列表值不会过滤掉 None 或者崩溃为一个单一的值。传递一个 MultiDict 确实会折叠单个项目。这将撤消以前的更改,该更改使传递列表变得困难,或者 None 列表中的值,以自定义URL转换器。 #2249

  • run_simple shows instructions for dealing with "address already in use" errors, including extra instructions for macOS. #2321

  • 扩展被认为在URL中始终安全的字符列表 RFC 3986#2319

  • 优化Stat重新加载程序,以避免在更多情况下查看不必要的文件。出于性能和准确性的考虑,仍建议使用看门狗重新加载器。 #2141

  • 开发服务器使用 Transfer-Encoding: chunked 当配置为使用HTTP/1.1时,用于流响应。 #2090, #1327#2091

  • 开发服务器使用HTTP/1.1,它在以下情况下启用保活连接和分块的流响应 threadedprocesses 已启用。 #2323

  • cached_property works for classes with __slots__ if a corresponding _cache_{name} slot is added. #2332

  • 重构调试器回溯格式化程序以使用Python的内置 traceback 模块越多越好。 #1753

  • 这个 TestResponse.text 属性是 r.get_data(as_text=True) ,以方便针对文本而不是字节进行测试。 #2337

  • safe_join ensures that the path remains relative if the trusted directory is the empty string. #2349

  • 百分比编码的换行符 (%0a ),由WSGI服务器解码,在路由时考虑,而不是提前终止匹配。 #2350

  • 测试客户端不为以下项设置重复的标头 CONTENT_LENGTHCONTENT_TYPE#2348

  • append_slash_redirect handles PATH_INFO with internal slashes. #1972, #2338

  • 的默认状态代码 append_slash_redirect 是308而不是301。这将保留请求正文,并将先前的更改匹配到 strict_slashes 在布线中。 #2351

  • 修整 ValueError: I/O operation on closed file. 当遵循多个重定向时,使用测试客户端。 #2353

  • Response.autocorrect_location_header is disabled by default. The Location header URL will remain relative, and exclude the scheme and domain, by default. #2352

  • Request.get_json() will raise a 400 BadRequest error if the Content-Type header is not application/json. This makes a very common source of confusion more visible. #2339

版本2.0.3

已发布2022-02-07

  • ProxyFix supports IPv6 addresses. #2262

  • 类型批注 Response.make_conditionalHTTPException.get_response ,以及 Map.bind_to_environ 接受 Request 除了……之外 WSGIEnvironment 对于第一个参数。 #2290

  • 的FIX类型批注 Request.user_agent_class#2273

  • 访问 LocalProxy.__class____doc__ 在未绑定的代理上,返回回退值而不是方法对象。 #2188

  • 使用测试客户端集进行重定向 RAW_URIREQUEST_URI 正确。 #2151

版本2.0.2

已发布2021/10/05

  • 在中处理多个令牌 Connection 路由WebSocket请求时的标头。 #2131

  • 在HTTPS上设置调试器PIN Cookie安全标志。 #2150

  • 的FIX类型批注 MultiDict.update 接受可迭代值 #2142

  • 在以下情况下防止重定向URL的重复编码 merge_slash=TrueRule.match#2157

  • CombinedMultiDict.to_dict with flat=False considers all component dicts when building value lists. #2189

  • send_file only sets a detected Content-Encoding if as_attachment is disabled to avoid browsers saving decompressed .tar.gz files. #2149

  • 修复类型批注 TypeConversionDict.get 不返回 Optional 如果两者都有,则为值 defaulttype 不是 None#2169

  • 固定要接受的传送规则工厂的类型批注 Iterable[RuleFactory] 而不是 Iterable[Rule] 对于 rules 参数。 #2183

  • 添加缺少的类型批注 FileStorage.__getattr__ #2155

  • 调试器Pin Cookie设置为 SameSite 设置为 Strict 而不是 None 与现代浏览器安全兼容。 #2156

  • 使用类型批注 IO[bytes]IO[str] 而不是 BinaryIOTextIO 以获得更广泛的类型兼容性。 #2130

  • 使用SAN匹配CN生成临时TLS证书。 #2158

  • 修复了使用Python3.6或0.4.17之前的greenlet版本时当地人的内存使用情况。 #2212

  • 中的FIX类型批注 CallbackDict ,因为它没有使用绑定的TypeVar。 #2235

  • 修复了在响应上设置CSP标头选项的问题。 #2237

  • 修复了交互式调试器中的一个问题,即在很长的回溯时间内,行在单击时不会展开。 #2239

  • 交互式调试器处理没有回溯的异常的显示,例如来自 ProcessPoolExecutor#2217

版本2.0.1

已发布2021-05-17

  • 的FIX类型批注 send_file max_age 可召回的。不要通过 pathlib.Pathmax_age#2119

  • 将顶级名称标记为已导出,以便类型检查了解用户项目中的导入。 #2122

  • 修复一些在Python3.6.0中不可用的类型。 #2123

  • cached_property is generic over its return type, properties decorated with it report the correct type. #2113

  • 修复了边界包含特殊正则表达式字符时的多部分解析错误。 #2125

  • 类型检查理解调用 headers.get 带有字符串的默认设置将始终返回字符串。 #2128

  • 如果 HTTPException.description 不是字符串, get_description 会将其转换为字符串。 #2115

版本2.0.0

已发布2021-05-11

  • 放弃对Python2和3.5的支持。 #1693

  • 贬低 utils.format_string() 使用 string.Template 相反。 #1756

  • 贬低 utils.bind_arguments()utils.validate_arguments() 使用 Signature.bind()inspect.signature() 相反。 #1757

  • 贬低 utils.HTMLBuilder . #1761

  • 贬低 utils.escape()utils.unescape() ,请改用MarkupSafe。 #1758

  • 反对无证 python -m werkzeug.serving CLI。 #1834

  • 不推荐使用 environ["werkzeug.server.shutdown"] 运行开发服务器时可用的函数。 #1752

  • 不推荐使用 useragents 模块和内置的用户代理解析器。使用专用的解析器库,方法是子类化 user_agent.UserAgent 和设置 Request.user_agent_class#2078

  • 拆下未使用的内部 posixemulation 模块。 #1759

  • datetime 值是时区感知的,使用 tzinfo=timezone.utc 。这适用于任何使用 http.parse_dateRequest.date.if_modified_since.if_unmodified_sinceResponse.date.expires.last_modified.retry_afterparse_if_range_header ,以及 IfRange.date 。在比较值时,还必须知道其他值,否则必须将这些值设置为幼稚。在传递参数或设置属性时,仍假定朴素值为UTC格式。 #2040

  • 将所有请求和响应包装器混合代码合并到单个代码中 RequestResponse 上课。不再需要使用Mixin类,并且将显示弃用警告。正在检查 isinstanceissubclass 反对 BaseRequestBaseResponse 将显示弃用警告并检查 RequestResponse 取而代之的是。 #1963

  • 如果安装了simplejson,则JSON支持不再使用simplejson。要使用另一个JSON模块,请重写 Request.json_moduleResponse.json_module#1766

  • Response.get_json() no longer caches the result, and the cache parameter is removed. #1698

  • Response.freeze() generates an ETag header if one is not set. The no_etag parameter (which usually wasn't visible anyway) is no longer used. #1963

  • 添加 url_scheme 参数 build() 重写绑定方案。 #1721

  • 将空列表作为查询字符串参数传递给 build() 不会附加不必要的 ? 。还可以删除任意数量的 None 列表中的项目。 #1992

  • 当通过 Headers 对象到测试客户端方法或 EnvironBuilder ,一个键的多个值将合并为一个逗号分隔的值。这与多值头上的HTTP规范相匹配。 #1655

  • 设置 Response.statusstatus_code 使用相同的解析和错误检查。 #1658#1728

  • MethodNotAllowed and RequestedRangeNotSatisfiable take a response kwarg, consistent with other HTTP errors. #1748

  • Unauthorized 产生一个 WWW-Authenticate 中每个值的标题 www_authenticate ,而不是将它们合并为一个值,以提高与浏览器和其他客户端的互操作性。 #1755

  • 如果 parse_authorization_header 无法解码头值,它返回 None 而不是提高 UnicodeDecodeError . #1816

  • 调试器不再使用jQuery。 #1807

  • 测试客户机在中包含查询字符串 REQUEST_URIRAW_URI . #1781

  • 切换参数顺序 default_stream_factory 以匹配调用时使用的顺序。 #1085

  • 添加 send_file 函数生成服务于文件的响应。改编自Flask的实现。 #265#1850

  • 添加 send_from_directory 函数安全地为受信任目录中的不可信路径提供服务。改编自Flask的实现。 #1880

  • send_file takes download_name, which is passed even if as_attachment=False by using Content-Disposition: inline. download_name replaces Flask's attachment_filename. #1869

  • send_file sets conditional=True and max_age=None by default. Cache-Control is set to no-cache if max_age is not set, otherwise public. This tells browsers to validate conditional requests instead of using a timed cache. max_age=None replaces Flask's cache_timeout=43200. #1882

  • send_file can be called with etag="string" to set a custom ETag instead of generating one. etag replaces Flask's add_etags. #1868

  • send_file sets the Content-Encoding header if an encoding is returned when guessing mimetype from download_name. #3896

  • 更新使用的默认值 generate_password_hash 。将pbkdf2迭代次数从260000次增加到150000次。将盐长度从8增加到16。使用 secrets 生成盐的模块。 #1935

  • 在以下情况下,重新加载程序不会崩溃 sys.stdin 不知何故 None#1915

  • 将参数添加到 delete_cookie 匹配 set_cookie 以及现代浏览器所期望的属性。 #1889

  • utils.cookie_date is deprecated, use utils.http_date instead. The value for Set-Cookie expires is no longer "-" delimited. #2040

  • 使用 request.headers 而不是 request.environ 若要查找标题属性,请执行以下操作。 #1808

  • 这个测试 Client 请求方法 (client.get 等)始终返回 TestResponse 。除了正常的行为之外, Response ,这个类提供 request 具有产生响应的请求,并且 history 要在以下情况下跟踪中间响应,请执行以下操作 follow_redirects 是使用的。 #763, #1894

  • 这个测试 Client 请求方法需要一个 auth 参数来添加 Authorization 标题。它可以是一个 Authorization 对象或一个 (username, password) 的元组 Basic 奥特。 #1809

  • 叫唤 response.close() 关于测试的反应 Client 将关闭请求输入流。这与文件行为相匹配,并且可以防止 ResourceWarning 在某些情况下。 #1785

  • EnvironBuilder.from_environ decodes values encoded for WSGI, to avoid double encoding the new values. #1959

  • 默认的statreloader将在非system/viralenv下查看Python文件 sys.path 条目,其中应包含大多数用户代码。它还将监视中给出的目录下的所有Python文件 extra_files#1945

  • 重新加载程序会忽略 __pycache__ 又是目录。 #1945

  • run_simple takes exclude_patterns a list of fnmatch patterns that will not be scanned by the reloader. #1333

  • Cookie名称不再是无引号的。这是反对的 RFC 6265 和可能允许的设置 __Secure 添加了前缀的Cookie。 #1965

  • 当单词可以是子字符串时,修复用户代理平台的一些单词匹配。 #1923

  • 开发服务器记录忽略的SSL错误。 #1967

  • 表单数据的临时文件在中打开 rb+ 而不是 wb+ 模式,以便更好地与某些库兼容。 #1961

  • 在某些测试中,使用SHA-1而不是MD5来生成eTag和调试器引脚。MD5在某些环境中不可用,例如FIPS 140。这可能会使一些缓存无效,因为ETag将不同。 #1897

  • 添加 Cross-Origin-Opener-PolicyCross-Origin-Embedder-Policy 响应头属性。 #2008

  • run_simple tries to show a valid IP address when binding to all addresses, instead of 0.0.0.0 or ::. It also warns about not running the development server in production in this case. #1964

  • 如果在Windows上安装了Colorama,则会显示开发服务器日志中的颜色。对于所有平台,样式支持不再需要单击。 #1832

  • 对空文件(或长度为0的其他数据)的范围请求将返回带有空文件的200响应,而不是416错误。 #1937

  • 新的SAN-IO基类用于 RequestResponse 已被提取以包含与WSGI或IO无关的所有行为。这些不是公共API,它们是正在进行的让ASGI框架使用Werkzeug的重构的一部分。 #2005

  • 解析 multipart/form-data 已经被重构为使用sans-io模式。这也应该会使具有大型二进制文件上载的解析表单的速度大大加快。 #1788, #875

  • LocalProxy matches the current Python data model special methods, including all r-ops, in-place ops, and async. __class__ is proxied, so the proxy will look like the object in more cases, including isinstance. Use issubclass(type(obj), LocalProxy) to check if an object is actually a proxy. #1754

  • Local uses ContextVar on Python 3.7+ instead of threading.local. #1778

  • request.values does not include form for GET requests (even though GET bodies are undefined). This prevents bad caching proxies from caching form data instead of query strings. #2037

  • 开发服务器将基础套接字添加到 environ AS werkzeug.socket 。这是非标准的,并且特定于开发服务器,其他服务器可能会在它们自己的密钥下公开这一点。它对于处理WebSocket升级请求很有用。 #2052

  • URL匹配假定 websocket=True WebSocket升级请求的模式。 #2052

  • 已更新 UserAgentParser 来处理更多的案件。 #1971

  • werzeug.DechunkedInput.readinto will not read beyond the size of the buffer. #2021

  • 修复超过最大内容大小时的连接重置。 #2051

  • pbkdf2_hex, pbkdf2_bin, and safe_str_cmp are deprecated. hashlib and hmac provide equivalents. #2083

  • invalidate_cached_property is deprecated. Use del obj.name instead. #2084

  • Href is deprecated. Use werkzeug.routing instead. #2085

  • Request.disable_data_descriptor is deprecated. Create the request with shallow=True instead. #2085

  • HTTPException.wrap is deprecated. Create a subclass manually instead. #2085

1.0.1版本

发布日期:2020-03-31

  • 使论点 RequestRedirect.get_response 可选的。 #1718

  • 只允许单个访问控制允许原始值。 #1723

  • 修复尝试解析不存在的内容安全策略标头时的崩溃。 #1731

  • http_date zero fills years < 1000 to always output four digits. #1739

  • 修复交互式调试器控制台中缺少的本地变量。 #1746

  • 修复像文件一样的对象的传递 io.BytesIOFileStorage.save . #1733

版本1.0.0

发布日期:2020-02-06

  • 放弃对python 3.4的支持。 (#1478

  • 删除在0.15版中发出拒绝警告的代码。 (#1477

  • 删除 werkzeug 模块有利于直接进口。例如,而不是 import werkzeug; werkzeug.url_quotefrom werkzeug.urls import url_quote . 首先安装0.16版本,以便在升级时看到不推荐使用的警告。 #2#1640

  • 补充 utils.invalidate_cached_property() 使缓存的属性无效。 (#1474

  • 的指令键 Set-Cookie 解析时不忽略响应头 Cookie 请求头。这允许名字为“expires”和“version”的cookie。 (#1495

  • 请求cookie被解析为 MultiDict 用同一个键捕获cookies的所有值。 cookies[key] 返回第一个值而不是最后一个值。使用 cookies.getlist(key) 获取所有值。 parse_cookie 也默认为 MultiDict . #1562#1458

  • 添加 charset=utf-8 到HTTP异常响应的 CONTENT_TYPE 标题。 (#1526

  • 交互式调试器处理嵌套范围中的外部变量,如lambda和理解。 #913#1037#1532

  • Mac上Opera 60的用户代理正确报告为“Opera”,而不是“Chrome”。 #1556

  • Android上的人行横道平台被正确地报告为“Android”,而不是“Chromeos”。 (#1572

  • 当当前服务器名称与配置的服务器名称不匹配时发出警告。 #760

  • 如果当前方案匹配,则配置为具有方案默认端口的服务器名称将与不带端口的当前服务器名称匹配。 #1584

  • InternalServerError has a original_exception attribute that frameworks can use to track the original cause of the error. #1590

  • 测试头是否与头键大小写无关,以便 X-Foo 是一样的 x-foo . #1605

  • http.dump_cookie() accepts 'None' as a value for samesite. #1549

  • set_cookie() accepts a samesite argument. #1705

  • 通过 Response.content_security_policy 数据结构。 #1617

  • LanguageAccept will fall back to matching "en" for "en-US" or "en-US" for "en" to better support clients or translations that only match at the primary language tag. #450, #1507

  • MIMEAccept uses MIME parameters for specificity when matching. #458, #1574

  • 如果开发服务器是用 SSLContext 配置为验证客户端证书,PEM格式的证书将作为 environ["SSL_CLIENT_CERT"] . #1469

  • is_resource_modified will run for methods other than GET and HEAD, rather than always returning False. #409

  • SharedDataMiddleware returns 404 rather than 500 when trying to access a directory instead of a file with the package loader. The dependency on setuptools and pkg_resources is removed. #1599

  • 添加 response.cache_control.immutable 旗子。请记住浏览器对此的支持 Cache-Control 头选项仍处于试验阶段,可能无法实现。 #1185

  • 使用开发服务器突出显示的可选请求日志是通过单击而不是TermColor来处理的。 #1235

  • 开发服务器的可选临时TLS支持由加密技术而不是pyopenssl处理。 #1555

  • FileStorage.save() supports pathlib and PEP 519 PathLike objects. #1653

  • 调试器安全pin在Podman管理的容器中是唯一的。 #1661

  • 创建URL时 host_matching 当存在具有不同主机的重复终结点时,启用将考虑当前主机。 #488

  • 这个 429 TooManyRequests503 ServiceUnavailable HTTP异常需要 retry_after 参数来设置 Retry-After 标题。 #1657

  • Map and Rule have a merge_slashes option to collapse multiple slashes into one, similar to how many HTTP servers behave. This is enabled by default. #1286, #1694

  • 将HTTP 103、208、306、425、506、508和511添加到状态代码列表中。 #1678

  • 添加 updatesetlistsetlistdefault 方法到 Headers 数据结构。 extend 方法可以 MultiDict 还有夸克。 #1687, #1697

  • 开发服务器接受以两个斜杠开头的路径,而不是剥离第一个路径段。 #491

  • 将访问控制(跨源请求共享,CORS)头属性添加到 RequestResponse 包装纸。 #1699

  • Accept values are no longer ordered alphabetically for equal quality tags. Instead the initial order is preserved. #1686

  • 补充 Map.lock_class 替代实现的属性。 #1702

  • 支持在路由系统中匹配和构建WebSocket规则,供异步框架使用。 #1709

  • 跨整个文件的范围请求响应为206而不是200,以更符合 RFC 7233 . 这可能有助于为旧版浏览器提供媒体服务。 #410, #1704

  • 这个 SharedDataMiddleware 违约 fallback_mimetypeapplication/octet-stream . 如果文件名看起来像文本mimetype,则 utf-8 添加了字符集。这与 BaseResponse 还有烧瓶的 send_file() . #1689

版本0.16.1

发布日期:2020-01-27

  • 修复子包的不推荐消息中的导入位置。 #1663

  • 修复Python3.5上的SSL错误,当dev服务器没有响应内容时。 #1659

版本0.16.0

发布日期:2019-09-19

  • 不推荐使用 werkzeug 模块有利于直接进口。已弃用的导入将在版本1.0中删除。

    例如,而不是 import werkzeug; werkzeug.url_quotefrom werkzeug.urls import url_quote . 弃用警告将显示要使用的正确导入。 werkzeug.exceptionswerkzeug.routing 也应该导入而不是访问,但由于技术原因不能显示警告。

    #2, #1640

版本0.15.6

发布日期:2019-09-04

  • 解决pip中的一个错误,当脚本是一个入口点时,它导致Windows上的重新加载程序失败。这解决了烧瓶的问题 flask run 命令失败,出现“没有名为Scriptsflask的模块”。 #1614

  • ProxyFix trusts the X-Forwarded-Proto header by default. #1630

  • 被蔑视的 num_proxies 参数 ProxyFix 集合 x_forx_protox_host 匹配0.14行为。这是为了减少中间升级的破坏性,但在1.0中,这一论点仍将被删除。 #1630

0.15.5版

发布日期:2019-07-17

  • 修复一 TypeError 由于 ast.Module 在Python 3.8中。 #1551

  • 修复一些Python2.7版本的调试版本中的C断言失败。 #1553

  • BadRequestKeyError adds the KeyError message to the description if e.show_exception is set to True. This is a more secure default than the original 0.15.0 behavior and makes it easier to control without losing information. #1592

  • 将调试器升级到jQuery 3.4.1。 #1581

  • 在一些外部调试器中解决导致重新加载失败的问题。 #1607

  • 解决一个问题,即重新加载程序无法自省安装为egg的setuptools脚本。 #1600

  • 重新装载者将使用 sys.executable 即使脚本被标记为可执行的,也会恢复0.15中引入的用于NixOS的行为。重新装载者不应该再导致 OSError: [Errno 8] Exec format error . #1482#1580

  • SharedDataMiddleware safely handles paths with Windows drive names. #1589

版本0.15.4

发布日期:2019-05-14

  • 修复一 SyntaxError 在python 2.7.5上。 (#1544

版本0.15.3

发布日期:2019-05-14

  • 在Python2.7的开发服务器中正确处理多行头折叠。 (#1080

  • 恢复 response 参数 Unauthorized . (#1527

  • Unauthorized 不添加 WWW-Authenticate 标题if www_authenticate 没有给出。 (#1516

  • 默认的URL转换器将字节正确编码为字符串,而不是用 b'' . (#1502

  • 在中修复文件名格式字符串 ProfilerMiddleware 正确处理浮点值。 (#1511

  • 更新 LintMiddleware 使用python 3。 (#1510

  • 调试器检测链接异常中的循环,在这种情况下不会超时。 (#1536

  • 在Docker中运行开发服务器时,调试器的安全性pin现在对于每个容器都是唯一的。

版本0.15.2

发布日期:2019-04-02

  • Rule 代码生成使用覆盖率将忽略的文件名。先前的值“generated”导致覆盖失败。 (#1487

  • 如果没有持久的cookie,测试客户端将删除cookie头。这修复了0.15.0中引入的一个问题,其中原始请求中的cookie用于重定向,导致诸如注销等功能失败。 (#1491

  • 测试客户端在将环境传递到应用程序之前复制环境,以防止就地修改影响重定向请求。 (#1498

  • 这个 "werkzeug" 仅当日志记录链中没有为其级别配置处理程序时,记录器才会添加处理程序。如果其他代码首先配置日志记录,这将避免双重日志记录。 (#1492

0.15.1版

发布日期:2019-03-21

  • Unauthorizeddescription 作为第一个参数,恢复以前的行为。新的 www_authenticate 参数列在第二个。 (#1483

版本0.15.0

发布日期:2019-03-19

  • 生成URL的速度大约快7倍。每个 Rule 编译用于构建自身的优化函数。 (#1281

  • MapAdapter.build() 可以通过 MultiDict 表示一个键的多个值。它在传递带有列表值的dict时已经做到了这一点。 (#724

  • path_info 默认为 '/' 对于 Map.bind() . (#740#768#1316

  • 变化 RequestRedirect 代码从301到308,在重定向期间保留动词和请求体(表单数据)。 (#1342

  • intfloat 如果传递 signed=True 参数。例如, /jump/<int(signed=True):count> . (#1355

  • Location 自动更正 Response.get_wsgi_headers() 相对于当前路径而不是根路径。 (#693#718#1315

  • 412响应再次包括实体头和正文中的错误消息。它们最初在实现时被省略 If-Match (#1233 ,但规范似乎不允许这样做。 (#1231#1255

  • 将删除1xx和204响应的内容长度头段。这修复了以前的更改,其中不会发送任何正文,但头仍然存在。新行为符合RFC7230。 (#1294

  • Unauthorized 采取了 www_authenticate 参数来设置 WWW-Authenticate 响应的头,这在技术上是有效401响应所必需的。 (#772#795

  • 添加对状态代码424的支持 FailedDependency . (#1358

  • http.parse_cookie() 忽略空段,而不是生成没有键或值的cookie。 (#1245#1301

  • http.parse_authorization_header (及 Authorizationauthorization )将授权头视为UTF-8。在Python2上,基本身份验证用户名和密码为 unicode 。 (#1325 )

  • parse_options_header() 理解 RFC 2231 参数继续。 (#1417

  • uri_to_iri() 不在未保留类(如空格)中取消对ASCII字符的引号,并在解码时保留无效的引用字节。 iri_to_uri() 不引用保留字符。参见 RFC 3987 对于这些角色类。 (#1433

  • get_content_type 为以结尾的任何mimetype附加一个字符集 +xml 不仅仅是那些以 application/ .已知的文本类型,如 application/javascript 也给出了字符集。 (#1439

  • 清理 werkzeug.security 模块,删除过时的hashlib支持。 (#1282

  • generate_password_hash() ,pbkdf2默认使用150000次迭代,从50000次增加。 (#1377

  • ClosingIterator 电话 close 在包裹的 可迭代的 不是内部迭代器。这不会影响对象 __iter__ 返回 self .对于其他对象,以前没有调用该方法。 (#1259#1260

  • 字节可以用作中的键 Headers 它们将像值一样被解码为拉丁语1。 (#1346

  • Range 验证传递给它的范围元组列表是否将生成有效的 Range 标题。 (#1412

  • FileStorage 查找上的属性 stream._file 如果它们不存在于 stream 解决一个问题 tempfile.SpooledTemporaryFile() 没有实现所有 io.IOBase .请参阅https://github.com/python/cpython/pull/3249。 (#1409

  • CombinedMultiDict.copy() 返回一个浅可变副本作为 MultiDict .副本不再反映对组合听写的更改,而是更普遍地有用。 (#1420

  • 调试器使用的jquery版本更新为3.3.1。 (#1390

  • 调试器正确地呈现长 markupsafe.Markup 实例。 (#1393

  • 当Werkzeug安装为zip文件时,调试器可以提供资源。 DebuggedApplication.get_resource 使用 pkgutil.get_data . (#1401

  • 调试器和服务器日志支持Python3的链式异常。 (#1396

  • 交互式调试器突出显示来自用户代码的帧,以便于在长堆栈跟踪中进行挑选。注意,如果使用virtualenv而不是venv创建env,调试器可能会错误地对某些帧进行分类。 (#1421

  • 单击交互式调试器顶部的错误消息将跳到跟踪的底部。 (#1422

  • 生成pin时,调试器将忽略 KeyError 当当前uid没有关联的用户名时引发,这可能发生在Docker中。 (#1471

  • BadRequestKeyError 添加 KeyError 消息的描述,使它更清楚是什么导致了400错误。像flask这样的框架可以在生产中通过设置 e.args = () . (#1395

  • 如果一个嵌套 ImportError 发生于 import_string() 回溯提到嵌套导入。删除用于处理“父级尚未设置的模块”的未测试代码路径。 (#735

  • 在使用PDB等工具时触发重新加载将不再隐藏输入。 (#1318

  • 如果python文件被标记为可执行,则重载程序将不会将python可执行文件预先发送到命令行。这使得重新装载机可以在尼克松身上工作。 (#1242

  • 解决一个问题 sys.path 与一起运行时在重新加载之间会发生变化 python -m app .重载程序可以检测到模块是用“-m”运行的,并重建该模块而不是中的文件路径。 sys.argv 重新加载时。 (#1416

  • dev服务器可以通过如下方式传递主机名绑定到UNIX套接字 unix://app.socket . (#209#1019

  • 服务器使用 IPPROTO_TCP 常量而不是 SOL_TCP 为了Jython的兼容性。 (#1375

  • 使用临时SSL证书时 run_simple() ,证书显示为自签名,而不是由无效的颁发机构签名。 (#1430

  • 开发服务器将记录未引用的IRI,而不是原始请求行,以便在开发期间更容易在请求路径中使用Unicode。 (#1115

  • 开发服务器识别 ConnectionError 在python 3上使客户机静音断开连接,而不使其他用户静音 OSErrors 可能是在应用程序内部提出的。 (#1418

  • 环境键 REQUEST_URIRAW_URI 包含原始路径,然后对其进行百分比解码。这是非标准的,但是许多WSGI服务器添加了它们。中间件可以取代 PATH_INFO 根据原始值进行路由。 (#1419

  • EnvironBuilder 没有设置 CONTENT_TYPECONTENT_LENGTH 在环境中,如果没有设置。以前,如果没有设置这些值,则使用默认值。现在可以区分空值和未设置值。 (#1308

  • 测试客户端引发 ValueError 如果查询字符串参数将覆盖路径中的查询字符串。 (#1338

  • test.EnvironBuildertest.Client 拿一个 json 参数而不是手动传递 datacontent_type .这是使用 test.EnvironBuilder.json_dumps() 方法。 (#1404

  • test.Client 重新编写重定向处理。 (#1402

    • 重定向环境是从初始请求环境复制的。

    • 当重定向到根目录下的路径时,脚本根目录和路径是正确区分的。

    • head方法未更改为get。

    • 307和308代码保留了方法和主体。所有其他的都忽略主体和相关的头。

    • 头将按照浏览器的操作传递给所有代码的新请求。

    • test.EnvironBuilder 在从数据中检测内容类型和长度头时,除了wsgi键之外,还设置它们。

    • 即使在 buffered=False 为了确保迭代器中间件可以安全地运行清理代码。只有最后一个响应没有缓冲。 (#988

  • EnvironBuilderFileStoragewsgi.get_input_stream() 不再共享全局 _empty_stream 实例。这通过防止在一个请求中关闭流会影响其他用法的情况来改进测试隔离。 (#1340

  • 默认值 SecureCookie.serialization_method 将从更改 picklejson 在1.0中。要升级现有令牌,请重写 unquote() 尝试 pickle 如果 json 失败。 (#1413

  • CGIRootFix 不再修改 PATH_INFO 对于非常老的版本的lighttpd。 LighttpdCGIRootFix 重命名为 CGIRootFix 在0.9中。两者都已弃用,将在1.0版中删除。 (#1141

  • werkzeug.wrappers.json.JSONMixin 已替换为flask的实现。检查文档的完整API。 (#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中的版本。

    • securecookiesessions 已经被提取到一个单独的项目中, secure-cookie .不推荐使用Werkzeug中的版本。

    • 一切都在 fixers 除外 ProxyFix ,已弃用。

    • 一切都在 wrappers 除外 JSONMixin ,已弃用。

    • atom 已弃用。这与Werkzeug的其他地方不符,社区中的一个专门类库能更好地为您服务。

    • jsrouting 已删除。在呈现模板或JSON响应时设置URL。

    • limiter 已删除。它的特定用途由werkzeug直接处理,但流限制一般由wsgi服务器更好地处理。

    • testtools 已删除。与默认测试客户机相比,它没有提供显著的好处。

    • iterio 被贬低。

  • wsgi.get_host() 不再看了 X-Forwarded-For . 使用 ProxyFix 来处理这件事。 (#609#1303

  • ProxyFix 被重构以支持更多的头、多个值和更安全的配置。

    • 每个头支持多个值。每个头分别配置受信任的代理数。这个 num_proxies 参数已弃用。 (#1314

    • 集合 SERVER_NAMESERVER_PORT 基于 X-Forwarded-Host . (#1314

    • 集合 SERVER_PORT 和修改 HTTP_HOST 基于 X-Forwarded-Port . (#1023#1304

    • 集合 SCRIPT_NAME 基于 X-Forwarded-Prefix . (#1237

    • 原始的wsgi环境值存储在 werkzeug.proxy_fix.orig 钥匙,一个听写器。各个钥匙 werkzeug.proxy_fix.orig_remote_addrwerkzeug.proxy_fix.orig_wsgi_url_schemewerkzeug.proxy_fix.orig_http_host 被贬低。

  • 中间件来自 werkzeug.wsgi 已移动到下面的单独模块 werkzeug.middleware ,以及从 werkzeug.contrib . 老年人 werkzeug.wsgi 导入被弃用,将在1.0版中删除。 (#1452

  • ProxyMiddleware 代理查询字符串。 (#1252

  • 由生成的文件名 ProfilerMiddleware 可以定制。 (#1283

  • 这个 werkzeug.wrappers 模块被转换成一个包,它的各种类被组织成单独的模块。任何以前记录的类(理解为现有的公共API)仍然可以从 werkzeug.wrappers 或者可以从其特定模块导入。 (#1456

版本0.14.1

2017年12月31日发布

  • 在集成开发服务器中解决了状态代码处理的回归问题。

0.14版

2017年12月31日发布

  • HTTP异常现在被自动捕获 Request.application .

  • 添加了对边缘浏览器的支持。

  • 增加了对缺乏 SpooledTemporaryFile .

  • 通过if-match添加对etag处理的支持

  • 添加了对samesite cookie属性的支持。

  • 补充 werkzeug.wsgi.ProxyMiddleware

  • 实施 has 对于 NullCache

  • get_multi 在缓存中,客户机现在一直返回列表。

  • 改进了监视器观察器的关闭,以便重载程序在旧版本的python退出时不会崩溃。

  • 为添加了支持 filename* 文件名属性符合RFC 2231

  • 解决了在Windows上无法准确读取重新加载PIN的计算机ID的问题。

  • 为重载程序中的init文件中的语法错误添加了解决方法。

  • 添加了对在Windows上使用控制台脚本的重新加载程序的支持。

  • 如果不需要HTTP主体(204、204、头请求等),内置HTTP服务器将不再关闭连接。

  • 这个 EnvironHeaders 对象现在跳过空内容类型和长度(如果设置为错误值)。

  • Werkzeug将不再发送1xx或204/304响应上的内容长度头段。

  • 现在也允许cookie值包含斜杠和等号,而不引用。

  • 放宽了路由转换器参数的regex。

  • 如果发送的cookie没有值,那么现在假定它们有一个空值,解析器接受这个值。以前,这可能已经损坏了值后面的cookie。

  • 测试 ClientEnvironBuilder 现在像请求对象一样支持mimetype。

  • 添加了对URL规则中静态权重的支持。

  • 更好地处理一些更复杂的重载场景,其中sys.path包含非目录路径。

  • EnvironHeaders 如果将非字符串键传递给它,则不会再引发奇怪的错误。

0.13版

2017年12月7日发布

  • 不赞成对python 2.6和3.3的支持。 这些版本的CI测试将不运行,下一个版本将完全放弃支持。 (pallets/meta#24

  • 提高 TypeError 当端口不是整数时。 (#1088

  • 完全折旧 werkzeug.script . 使用 Click 相反。 (#1090

  • response.age 被解析为 timedelta .以前,它被错误地视为 datetime .头值是整数秒,而不是日期字符串。 (#414

  • 修复错误 TypeConversionDict 使用转换器时不会传播错误。 (#1102

  • Authorization.qop 是字符串而不是集合,以符合RFC2617。 (#984

  • 默认情况下,当编码的cookie大于4093字节时引发异常。浏览器可能会静默地忽略大于此值的cookie。 BaseResponse 具有新属性 max_cookie_sizedump_cookie 有新的论点 max_size 来配置这个。 (#780#1109

  • 在中修复类型错误 werkzeug.contrib.lint.GuardedIterator.close . (#1116

  • BaseResponse.calculate_content_length 现在正确地适用于Python3上的Unicode响应。它首先使用 iter_encoded . (#705

  • 安全cookie控件在python 3上使用字符串密钥。 (#1205

  • 共享数据中间件接受一个列表,而不是静态位置的dict,以保留查找顺序。 (#1197

  • 不带编码的HTTP头值可以包含单引号。 (#1208

  • 内置的dev服务器支持使用分块传输编码接收请求。 (#1198

0.12版本

2017年5月16日发布

  • 修复回归:拉请求 #892 阻止Werkzeug在反向代理后正确记录远程客户端的IP,即使使用 ProxyFix .

  • 修复错误 safe_join 在Windows上。

0.12版本

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 会导致无限循环。

  • 数据结构现在从相关的基类继承 collections stdlib中的模块。见794。

  • 在用户代理字符串中添加对识别netbsd、openbsd、freebsd、dragonflybsd平台的支持。

  • 正确识别SeaMonkey浏览器名称和版本

  • 识别baiduspider和bingbot用户代理

  • 如果 LocalProxy 的包装对象是一个函数,请使用 __wrapped__ 属性。

  • 的默认值 generate_password_hash 已更改为更安全的,请参阅拉请求 #753 .

  • 在选项头解析中添加对编码的支持,请参见拉请求 #933 .

  • test.Client 现在用相对URL正确地处理位置头,请参见拉请求 #879 .

  • 什么时候? HTTPException 它现在打印描述,以便于调试。

  • Werkzeug的类似dict的数据结构现在已经 view -方法在python 2下,请参见pull请求 #968 .

  • 修复错误 MultiPartParser 当没有的时候 stream_factory 是在初始化期间提供的,请参见拉请求 #973 .

  • 在调试器中间件的python提示中禁用自动更正和拼写检查,请参见拉请求 #994 .

  • 方法不匹配时不重定向到斜线路由,请参见拉请求 #907 .

  • 使用时修复错误 SharedDataMiddleware 对于冻结的包裹,请参见拉取请求 #959 .

  • Range 为无效值修复了头分析函数 #974 .

  • 添加对字节范围请求的支持,请参见拉请求 #978 .

  • 在dev服务器中使用现代加密默认值 #1004 .

  • 测试客户机的post()方法现在通过data参数接受文件对象。

  • 基于HTTP代码的彩色运行简单终端输出 #1013 .

  • 在调试器控制台中修复自XSS,请参见 #1031 .

  • 固定IPython 5.xShell支架,参见 #1033 .

  • 更改接受数据结构以先按特定性排序,以便在使用时获得更准确的结果 best_match 对于mime类型(例如 requests.accept_mimetypes.best_match

版本0.11.16

  • werkzeug.serving:设置内容类型/内容长度(如果客户提供)

  • 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日发布。

  • 修复多个与空列表相关的错误。参见 #1000 .

  • 添加一些文档字符串到 EnvironBuilder 以前无意中丢失的属性。

  • 为Windows上的重新加载添加了一个解决方法。

版本0.11.11

2016年8月31日发布。

  • 修复python3的jsonrequestmixin。见731

  • 当传递整数时,修复测试客户机中的中断字符串处理。见852

  • 修复错误 parse_options_header 如果以逗号或分号开头的无效内容类型将导致返回值无效,请参阅问题 #995 .

  • 在将空列表作为值传递时修复多个方面的错误,请参见问题 #979 .

  • 修复允许在Werkzeug调试器上使用XSS的安全问题。参见 #1001 .

版本0.11.10

2016年5月24日发布。

  • 修复了在Python2.6上运行并使用中断的区域设置时发生的错误。请参见拉取请求912。

  • 修复了在Google应用程序引擎上运行调试器时的崩溃。见问题925。

  • 修复了多部分解析可能导致内存耗尽的问题。

版本0.11.9

2016年4月24日发布。

  • 已更正导致调试器在POSIX系统上不使用计算机GUID的问题。

  • 针对调试器的pin用法,更正了python 3上的unicode错误。

  • 更正了pin调试代码中的时间戳验证。没有这个固定装置,这个别针被记住的时间太长了。

版本0.11.8

2016年4月15日发布。

  • 修复了Python3上OS X上的机器guid检测代码的问题。

版本0.11.7

2016年4月14日发布。

  • 修正了调试器在python 3上的回归。

版本0.11.6

2016年4月14日发布。

  • 服务:仍然在错误的请求上显示客户机地址。

  • 改进了对调试器的基于pin的保护,使其更难通过尝试cookie强行执行。请记住,调试器 不适用于在生产环境中运行

  • 将pin超时时间增加到一周,以减少对用户的烦扰,从而减少用户完全禁用pin检查的可能性。

  • werkzeug.serving:当路径以双斜杠开头时,修复损坏的http_主机。

版本0.11.5

2016年3月22日发布。

  • werkzeug.serving:尝试与HTTP服务器的SSL连接时修复崩溃。

版本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版本

2015年11月10日发布。

  • 修正了调试器中python 3的回归。

版本0.11

2015年11月8日发布,代号gleisbaumaschine。

  • 补充 reloader_paths 选择权 run_simple 以及其他功能 werkzeug.serving .这允许用户使用自定义路径完全覆盖werkzeug的python模块监视。

  • Werkzeug类的许多自定义缓存属性现在是python类的子类。 property 类型(问题 #616

  • bind_to_environ 现在不区分中的隐式和显式默认端口号 HTTP_HOST (拉动请求 #204

  • BuildErrors 现在有更多的信息。他们提供完整的句子作为错误信息,并提供建议(拉请求 #691

  • 修复在用户代理解析器中提取safari的内部版本号而不是版本的错误(pull请求 #703

  • 修复了rediscache set_many为twemproxy中断的问题,twemproxy不支持默认的multi命令(pull请求 #702

  • mimetype 请求类和响应类的参数现在总是转换为小写。

  • 已更改缓存,以便在超时为0时缓存永不过期。这还修复了redis setex的问题(问题 #550

  • Werkzeug现在假设 UTF-8 作为UNIX上的文件系统编码,如果python检测到它是ascii。

  • 新建可选 has 方法。

  • 修复了 parse_options_header (拉动请求 #643

  • 如果启用了重新加载,那么如果可能的话,服务器现在将打开父进程中的套接字。这意味着当重载程序启动来自客户机的连接时,将等待而不是关闭。这并不适用于所有的Python版本。

  • 为调试器实现了基于pin的身份验证。这可以选择禁用,但不鼓励。此更改是必要的,因为发现生产中运行调试器的人太多。

  • devserver不再需要安装ssl模块。

版本0.10.5

(错误修复版本,发布日期待定)

  • 重新加载:通过将临时文件移到原始文件上(例如,带Pycharm的案例(拉请求),正确检测文件更改。 #722

  • 修复的布尔行为 werkzeug.datastructures.ETags 在python 3下(发行 #744

版本0.10.4

(Bugfix发布,2015年3月26日发布)

  • 重新发布0.10.3,手动移除包装制品。

版本0.10.3

(Bugfix发布,2015年3月26日发布)

  • 重新发布0.10.2,无包装瑕疵。

0.0.2版本

(Bugfix发布,2015年3月26日发布)

  • 固定问题,其中 empty 可以中断依赖关键字参数的第三方库(拉请求 #675

  • 改进 Rule.empty 通过提供 `get_empty_kwargs 允许设置自定义Kwarg而不必覆盖整个 empty 方法。(拉动请求 #675

  • 固定的 `extra_files `当包含在服务器参数中时,用于重新加载以不导致启动崩溃的参数

  • 使用 MultiDict 现在不再支持生成URL时。该行为引入了几个回归。

  • 修复stat重载的性能问题(拉请求 #715

0.0.1版本

(Bugfix版本,2015年2月3日发布)

  • 修正了对URL使用多个查询值的回归(拉请求 #667

  • 修复Eventlet的MonkeyPatching和内置服务器的问题(拉请求 #663

版本0.10

2015年1月30日发布,代号Bagger。

  • 更改了中缓存的错误处理并改进了testsuite contrib.cache .

  • 修正了在创建特殊的SSL上下文时python 3上的错误,因为 sys.maxint 未定义。

  • 修复了python 3上的一个bug,它导致 make_ssl_devcert() 例外地失败。

  • 增加了504和505的例外情况。

  • 增加了对Chromeos检测的支持。

  • 向路由系统添加了UUID转换器。

  • 添加了说明如何退出服务器的消息。

  • 修复了python 2上的一个bug,它导致 len 对于 werkzeug.datastructures.CombinedMultiDict 崩溃。

  • 添加了对stdlib pbkdf2 hmac的支持(如果找到兼容摘要)。

  • 要使用的移植测试套件 py.test .

  • 对各种中间商的次要优化(拉请求 #496#571

  • 使用stdlib ssl 模块而不是 OpenSSL 对于内置服务器(问题 #434 )。这意味着不再支持OpenSSL上下文,而是 ssl.SSLContext 来自stdlib。

  • 生成外部URL时允许与协议相关的URL。

  • 固定的Atom联合打印TZ感知日期时间对象的时区偏移量(拉请求 #254

  • 改进了重新加载程序,以跟踪添加的文件,并从包中出现语法错误的损坏的sys.modules设置中恢复。

  • cache.RedisCache 现在支持任意 **kwargs 对于redis对象。

  • werkzeug.test.Client 现在在解析307重定向时使用原始请求方法(拉请求 #556

  • werkzeug.datastructures.MIMEAccept 现在正确处理mimetype参数(pull请求 #205

  • werkzeug.datastructures.Accept 现在处理的质量 0 不可容忍,根据RFC 2616(拉请求 #536

  • werkzeug.urls.url_fix 现在正确编码主机名 idna 编码(问题 #559 )。它也不会在格式错误的URL上崩溃(问题 #582

  • werkzeug.routing.MapAdapter.match now recognizes the difference between the path / and an empty one (issue `` #360``)。

  • 交互式调试器现在尝试解码非ASCII文件名(问题 #469

  • 将生成的SSL证书的默认密钥大小增加到1024位(发出 #611

  • 添加了对指定 Response 调用时使用的子类 redirect() .

  • werkzeug.test.EnvironBuilder 现在不再使用请求方法来猜测内容类型,而完全依赖于 formfilesinput_stream 属性(问题 #620

  • 将Symbian添加到用户代理平台列表中。

  • 修正了自动设置内容长度的条件

  • 未设置 Content-Length 写入response.stream时(问题 #451

  • wrappers.Request.method 现在总是大写,消除了wsgi环境的不一致性(问题 647

  • routing.Rule.empty 现在可以正确处理子类 Rule (拉动请求 #645

  • 在同步更新的情况下使地图更新安全。

  • 允许同一字段有多个值用于URL生成(问题 #658

版本0.9.7

(错误修复版本,发布日期待定)

  • 修复中的Unicode问题 werkzeug.debug.tbtools .

  • 修复中的python 3兼容性问题 werkzeug.posixemulation .

  • 的致命打字错误的后台修复 ImmutableList (问题) #492

  • 为创建缓存目录 FileSystemCache 原子(问题 #468

  • 使用memcached密钥的本机字符串来使用python 3客户机(问题 #539

  • 修复的字符集检测 werkzeug.debug.tbtools.Frame 对象(问题 #547#532

  • 固定 AttributeError 遮掩 werkzeug.utils.import_string (问题) #182

  • 显式关闭服务器(问题 #519

  • 修复超过2592000的超时错误地解释为Unix时间戳 werkzeug.contrib.cache.MemcachedCache (问题) #533

  • 修复错误在哪里 werkzeug.exceptions.abort 将引发预期类的任意子类(问题 #422

  • 修复损坏的 jsrouting (由于移除 werkzeug.templates

  • werkzeug.urls.url_fix 现在不再对格式错误的URL崩溃,而是返回未修改的URL。这是一个廉价的解决方法 #582 版本0.10中包含正确的修复程序。

  • RPR werkzeug.wrappers.Request 不再在非ASCII值上崩溃(拉请求 #466

  • 修复错误 cache.RedisCache 当与 redis.StrictRedis 对象(拉请求 #583

  • 这个 qop 参数用于 WWW-Authenticate 按照RFC 2617(发行版)的要求,标题现在总是被引用 #633

  • 修复错误 werkzeug.contrib.cache.SimpleCache 在python 3中,当从缓存中删除旧条目时,add/set可能会引发异常(pull请求 #651

版本0.9.6

(Bugfix版本,2014年6月7日发布)

  • 为IRI到URI的转换添加了一个安全的转换,并在内部使用它来解决协议的规范冲突问题,例如 itms-service .

版本0.9.7

  • 修复了uri_to_iri()不重新编码查询字符串参数中的哈希。

0.9.5版

(Bugfix版本,2014年6月7日发布)

  • 将charset参数从请求对象转发到environ builder。

  • 修复了对多部分数据中缺少边界的错误处理。

  • 固定的会话创建在没有 os.urandom() .

  • 修正了字典键中的pluses没有正确的url编码。

  • 修正了deepcopy不适用于多个dict的问题。

  • 修复了重定向上的双引号问题。

  • 修复了2.x上头中出现的Unicode键的问题。

  • 修复了测试生成器中使用Unicode字符串的错误。

  • 修复了wsgi探查器中python 3上的unicode错误。

  • 修复了python 2.7.7和python 3.4上的安全字符串比较函数的问题。

版本0.9.4

(Bugfix版本,2013年8月26日发布)

  • 修复了Python3.3和cookie解析中的一个边缘案例的问题。

  • 修复了通过wsgi解码舞蹈未正确处理的解码错误。

  • 修复了URI到IRI的转换错误地解码百分号。

版本0.9.3

(Bugfix版本,2013年7月25日发布)

  • 恢复的行为 data 请求类的描述符,用于0.9之前的行为。这也意味着 .data.get_data() 有不同的行为。新代码应使用 .get_data() 总是这样。

    除此之外,现在还有一个标志 .get_data() 方法控制表单数据分析应该发生什么,表单分析器将使用缓存数据。这使得处理自定义表单数据更加一致。

版本0.9.2

(Bugfix版本,2013年7月18日发布)

  • 增列 unsafe 参数设置为 urls.url_quote

  • 修复了的问题 urls.url_quote_plus 不引用 '+' 正确。

  • 移植的剩余部分 RedisCache 到python 3.3。

  • 移植的剩余部分 MemcachedCache 到python 3.3

  • 修复了contrib atom模块中的拒绝警告。

  • 修正了通过标题字典设置内容类型而不是使用内容类型参数的回归。

  • 对stdlib安全字符串比较函数使用正确的名称。

  • 修复了文档字符串中的错误引用 release_local() .

  • 修复了一个 AttributeError 有时在访问 werkzeug.wrappers.BaseResponse.is_streamed 属性。

0.9.1版

(Bugfix版本,2013年6月14日发布)

  • 修正了在路由系统的某些部分或URL引用函数中不再接受整数的问题。

  • 修复了一个问题 url_quote 没有为单个数字码点生成正确的转义码。

  • 修复了一个问题 SharedDataMiddleware 在某些情况下,没有正确地读取路径并中断ETag生成。

  • 正确处理 Expect: 100-continue 在开发服务器中解决与curl有关的问题。

  • 请求关闭时自动排出输入流。这可以解决不接触请求文件导致超时的问题。

  • 修复了如果将非限制流传递到多部分分析器中,则不会执行任何操作的流的耗尽。

  • 引发了多部分分析器的缓冲区大小。

版本0.9

2013年6月13日发布,代号Planierraupe。

  • 为添加了支持 tell() 在有限的河流上。

  • ETags 如果它包含至少一个任何类型的ETag,包括弱ETag,那么它就不是零。

  • 为SSL服务器的stdlib中的bug添加了一个解决方法。

  • 改进了devserver的ssl接口,使其能够轻松生成证书并从文件中加载证书。

  • 重构测试客户端以调用类上用于重定向的open方法。这使得子类化更加强大。

  • wsgi.make_chunk_itermake_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() .

  • 更名 LighttpdCGIRootFixCGIRootFix .

  • 总是治疗 + 修复URL时的安全性就像人们喜欢滥用URL一样。

  • 在contrib profiler的目录中添加了对分析的支持。

  • 转义函数现在默认转义引号。

  • 改变了例外的重复,使其不那么神奇。

  • 简化的异常接口,不再需要传递环境来接收响应对象。

  • 向iterio对象添加了sentinel参数。

  • 增加了对安全模块的pbkdf2支持。

  • 添加了一个纯请求类型,该类型禁用所有表单分析,只留下流。

  • 已删除对已弃用的的的支持 fix_headers .

  • 已删除对已弃用的的的支持 header_list .

  • 已删除对的已弃用参数的支持 iter_encoded .

  • 已删除对已弃用的有限流对象的非静默用法的支持。

  • 移除先前假人的支架 writable 缓存属性上的参数。

  • 添加了对显式关闭请求对象以关闭关联资源的支持。

  • 条件请求处理或对响应上的数据属性的访问不再忽略直接传递模式。

  • 删除了werkzeug.templates和werkzeug.contrib.kickstart。

  • 已更改转发主机的主机查找逻辑,以允许主机列表,在这种情况下,只提取第一个。

  • 补充 wsgi.get_query_stringwsgi.get_path_infowsgi.get_script_name 并使 wsgi.pop_path_infowsgi.peek_path_info 函数执行Unicode解码。这对于避免在python 3上公开wsgi编码舞蹈是必要的。

  • 补充 content_encodingcontent_md5 到请求对象的公共请求描述符mixin。

  • 补充 optionstrace 到测试客户机。

  • 对输入流的使用进行了全面的检查,以便于使用和扩展。现在,通过检测内容类型头而不是请求方法,在输入端检测内容负载更符合HTTP。这也意味着请求类上的流属性总是可用的,而不是在解析失败时。

  • 增加了对使用的支持 werkzeug.wrappers.BaseResponse 在WITH语句中。

  • 改变 get_app_iter 尽早获取响应,以便在包装响应iterable时不会失败。这使得过滤更容易。

  • 介绍 get_dataset_data 响应方法。

  • 介绍 get_data 请求。

  • 软不赞成 data 请求和响应对象的描述符。

  • 补充 as_bytes 对某些头文件执行操作,以简化对cookie等内容的处理。

  • 使调试器将跟踪粘贴到Github的Gist服务中作为私有粘贴。

0.8.4版

(错误修复版本,发布日期待定)

  • 在调试器中添加了一个favicon,它修复了通过在Google Chrome中对/favicon.ico的请求触发状态更改的问题。这可以解决flask和其他框架的一些问题,这些框架在堆栈上使用上下文本地对象,并在出错时保留上下文。

  • 修复了调试器中向上滚动的问题。

  • 修复了运行在与URL根目录不同的URL上的调试程序的问题。

  • 修正了代理没有正确转发一些很少使用的特殊方法的问题。

  • 添加了一个解决方案,以防止XSS保护Chrome破坏调试器。

  • 如果redis未运行,则跳过redis测试。

  • 修复了多部分分析器中导致内容类型无法正确提取的错误。

0.8.3版

(Bugfix版本,2012年2月5日发布)

  • 修复了另一个问题 wsgi.make_line_iter 其中,没有正确处理比缓冲区大小更长的行。

  • 在调试控制台完成执行后还原stdout,以便更好地在GAE上使用调试器。

  • 修复了int子类的redis缓存错误(影响bool缓存)。

  • 修复了来自不受信任源的重定向目标的XSS问题。

  • Redis缓存后端现在支持密码验证。

0.8.2版

(Bugfix版本,2011年12月16日发布)

  • 修复了内置服务器的请求处理无法正确响应套接字错误的问题。

  • 路由请求重定向异常的代码属性现在已正确使用。

  • 修复了一个关闭窗口的错误。

  • 修正了一些在URL规则中硬编码非ASCII字符的Unicode问题。

  • 修复了分配给FDEL而不是 __doc__ .

  • 修正了一个问题,即CRLF的行尾可以被line iter函数分割成两部分,从而导致多部分文件上载出现问题。

0.8.1 版本

(Bugfix版本,2011年9月30日发布)

  • 修复了memcache工作不正常的问题。

  • 修复了python 2.7.1及更高版本的一个问题,该问题破坏了使用 copy.copy() .

  • 改变了不可变的有序多指令的散列方法,以解决其他Python实现可能出现的问题。

版本0.8

2011年9月29日发布,代号L_Tkolben

  • 为一般目的删除了特定于数据结构的键错误 BadRequestKeyError .

  • 文件化的 werkzeug.wrappers.BaseRequest._load_form_data() .

  • 路由系统现在还接受字符串而不是字典 query_args 参数,因为我们只是为重定向传递它们。

  • Werkzeug现在自动设置内容长度,当 data 属性的设置是为了提高效率和简单性。

  • 路由系统现在将服务器名称规范化为小写。

  • 如果服务器名称的配置不正确,路由系统将不再引发ValueErrors。这将使部署更加容易,因为您现在可以忽略这个因素。

  • 修复了分析HTTP摘要头的错误。它拒绝了缺少nc和nonce参数的头。

  • 代理修复程序现在也更新了基于x-forwarded-proto的wsgi.url_方案。

  • 为redis缓存添加了对键前缀的支持。

  • 添加了抑制包装器中某些自动更正的功能,这些自动更正现在通过 autocorrect_location_headerautomatically_set_content_length 在响应对象上。

  • Werkzeug现在使用了一种新的方法来检查输入数据的长度是否完整,如果服务器不能这样做,它会自己引发IO错误。

  • wsgi.make_line_iter 现在要求的限制不高于流可以提供的长度。

  • 将表单解析重构为一个表单分析器类,这样就可以钩住解析过程的各个部分进行调试和扩展。

  • 对于条件响应,内容长度在已经存在时不再设置,如果缺少则添加。

  • 不可变的数据结构现在可以进行哈希运算。

  • Headers数据结构不再允许值中有换行符以避免头注入攻击。

  • 使通过子类化在代理修复中选择不同的远程地址成为可能。

  • 添加了基于流的URL解码。这减少了URL解码的大型传输表单数据的内存使用,因为Werkzeug将不再将所有未解析的数据加载到内存中。

  • memcache客户机现在不再使用错误的cmemcache模块并支持pylibmc。GAE不会自动尝试,专用类也不再是必需的。

  • Redis缓存现在可以正确地序列化数据。

  • 移除了对python 2.4的支持

0.7.2版

(Bugfix版本,2011年9月30日发布)

  • 修复了调试程序的CSRF问题。

  • 调试器现在正在lodgit上生成私有粘贴。

  • 如果URL映射现在绑定到环境,那么查询参数将从中正确解码以进行重定向。

0.7.1版本

(Bugfix版本,2011年7月26日发布)

  • 修复了新版本的ipython的问题。

  • 禁用不可靠工作的基于pyinotify的重载。

版本0.7

2011年7月24日发布,代号Schraubschl_ssel

  • 向werkzeug缓存抽象层添加对python libmemcached的支持。

  • 改进 url_decode()url_encode() 性能。

  • 修复了通过pkg_资源加载时,sharedtamiddleware可能导致奇怪路径上的内部服务器错误的问题。

  • 修正了当生成的组件包含冒号时导致URL无效的URL生成错误。

  • werkzeug.import_string() 现在可以正确地使用部分设置的包。

  • 已在开发服务器上禁用IPv6的自动套接字切换,因为它导致了问题。

  • 创建条件HTTP响应时,Werkzeug不再重写日期头。

  • 路由系统提供了一种检索给定路径匹配方法的方法。

  • 路由系统现在接受一个参数来更改编码错误行为。

  • 本地管理器现在可以接受构造函数中转发到包装的本地对象的自定义标识函数。

  • 现在,url-unquote-plus再次接受unicode字符串。

  • 修复了文件系统会话支持的prune函数和并发使用的问题。

  • 修复了丢弃端口的外部URL生成问题。

  • 为Werkzeug缓存抽象层添加了对pylibmc的支持。

  • 修复了新的多部分分析器的一个问题,该问题发生在换行符刚好在块限制上时。

  • 如果端口正在使用,则cookie现在设置正确。如果试图为没有点的域设置cookie,则会引发运行时错误。

  • 修复了template.from文件不适用于文件描述符的问题。

  • 重新加载现在可以使用inotify跟踪重新加载。这需要安装pyinotify库。

  • Werkzeug调试器现在可以提交到自定义lodgit安装。

  • 重定向函数的状态代码断言现在允许201用作重定向代码。虽然它不是一个真正的重定向,但它与重定向共享了足够多的内容,使函数仍然有用。

  • 修复了Pypy的SecureCookie。

  • 固定的 ValueErrors 在接到 best_matchMIMEAccept 提供无效用户数据时的对象。

  • 已弃用 werkzeug.contrib.kickstartwerkzeug.contrib.testtools

  • URL路由现在可以通过URL参数来保持重定向。在将来,对URL参数进行匹配也是可能的。

  • 头编码从UTF-8更改为Latin1,以支持到python 3的端口。传递给对象的字节字符串保持不变,这使得有可能使用UTF-8 cookie。在这一部分中,python 3版本稍后将发生变化,因为它将始终对latin1值进行操作。

  • 修复了表单分析器中的一个错误,如果使用多部分数据中的某些值,该错误会导致最后一个字符被丢弃。

  • multipart解析器现在查看part-individual-content-type头来覆盖全局字符集。

  • 为文件存储对象引入了mimetype和mimetype_-params属性。

  • 更改了filestore文件名回退逻辑以跳过python用于标记特殊文件(如stdin)的特殊文件名。

  • 引入了更多的HTTP异常类。

  • call_on_close 现在可以用作装饰。

  • 支持Redis作为缓存后端。

  • 补充 BaseRequest.scheme .

  • 支持RFC5789补丁方法。

  • 新的自定义路由分析器和更好的排序。

  • 拆下的支架 is_behind_proxy .使用wsgi中间件来重写 REMOTE_ADDR 根据你的设置。另请参见 werkzeug.contrib.fixers.ProxyFix 换掉一个。

  • 向测试客户端添加了cookie锻造支持。

  • 增加了对路由系统中基于主机的匹配的支持。

  • 从默认的“忽略”切换到更好的“替换”Unicode错误处理模式。

  • 内置服务器现在将名为“werkzeug.server.shutdown”的函数添加到wsgi env中以启动关闭。这目前只适用于Python2.6和更高版本。

  • 现在假设报头是latin1,以便在我们得到支持后与python 3更好地兼容。

  • 补充 werkzeug.security.safe_join() .

  • 补充 accept_json 类似于 accept_htmlwerkzeug.datastructures.MIMEAccept .

  • 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版

(Bugfix版本,2010年4月23日发布)

  • 已重命名属性 implicit_seqence_conversion 请求对象的属性 implicit_sequence_conversion .

0.6版本

(Bugfix版本,2010年4月13日发布)

  • 大量改进的本地对象。现在应该选择独立的greenlet构建并支持免费可调用文件的代理。现在还有一个本地堆栈,通过将当前请求/响应推到堆栈顶部,可以从内部调用相同的应用程序。

  • 如果没有提供方法,路由生成方法也将正确生成非默认方法规则。

  • 为内置服务器添加了适当的IPv6支持。

  • Windows特定的文件系统会话存储修复程序。(现在应该在高并发性下更稳定)

  • 固定A NameError 在会话系统中。

  • 修复了werkzeug.script系统中参数为空的错误。

  • 修正了一个错误,如果应用程序使用 logging.basicConfig() (499)

  • 增加了安全密码散列和检查功能。

  • HEAD 现在隐式添加为路由系统中的方法,如果 GET 存在。不这样做被认为是一个错误,因为代码经常假定是这样,并且在不规范化的Web服务器中也是这样。 HEADGET 这可能会打破 HEAD 请求。

  • 脚本支持现在可以启动SSL服务器。

版本0.6

2010年2月19日发布,代号Hammer。

  • 已删除挂起的折旧

  • sys.path现在从testapp打印。

  • 修正了RFC2068与cookie值引用的不兼容。

  • 这个 FileStorage 现在允许访问多部分头文件。

  • cached_property.writeable 已弃用。

  • MapAdapter.match() now accepts a return_rule keyword argument that returns the matched Rule instead of just the endpoint

  • routing.Map.bind_to_environ() 如果映射绑定到无效的wsgi环境,则立即引发更正确的错误消息。

  • 向内置开发服务器添加了对SSL的支持。

  • 当响应对象被评估为wsgi应用程序时,它们将不再就地修改。为了向后兼容 fix_headers 函数被重写时仍将被调用。但是,您应该将应用程序更改为使用 get_wsgi_headers 如果在发送响应之前需要修改头,因为在将来的版本中向后兼容性支持将消失。

  • append_slash_redirect() 不再需要查询字符串位于wsgi环境中。

  • 补充 DynamicCharsetResponseMixin

  • 补充 DynamicCharsetRequestMixin

  • 补充 BaseRequest.url_charset

  • 请求和响应对象具有默认值 __repr__ 现在。

  • 现在可以对内置数据结构进行处理。

  • 表单数据解析器现在将查看文件名,而不是内容类型,以确定是否应将上载视为常规表单数据或文件上载。这修复了Google Chrome的错误。

  • 改进的性能 make_line_iter 以及用于二进制上传的多部分解析器。

  • 固定的 is_streamed

  • 修正了路径引用错误 EnvironBuilder 这导致路径信息和脚本名称以未加引号的方式结束在环境中。

  • werkzeug.BaseResponse.freeze() 现在设置内容长度。

  • 对于未知的HTTP方法,请求流现在总是有限的,而不是空的。这使得在Werkzeug之上更容易实现DAV和其他协议。

  • 补充 werkzeug.MIMEAccept.best_match()

  • 现在支持来自标准字典的多值测试客户端日志。以前你必须用多听写。

  • 规则模板现在可以正确地与子装载、子域和其他规则工厂一起使用。

  • 已弃用的非静默用法 werkzeug.LimitedStream .

  • 为Werkzeug的许多部分增加了IRI处理支持。

  • 开发服务器现在正确地登录到werkzeug记录器。

  • 补充 werkzeug.extract_path_info()

  • 修复了在 url_fix()

  • 补充 fallback_mimetypewerkzeug.SharedDataMiddleware .

  • 贬低 BaseResponse.iter_encoded() 的charset参数。

  • 补充 BaseResponse.make_sequence()BaseResponse.is_sequenceBaseResponse._ensure_sequence() .

  • 添加得更好 __repr__ 属于 werkzeug.Map

  • import_string 现在也接受Unicode字符串。

  • 开发服务器不会在主机名后的双斜杠处中断。

  • 更好的 __repr__ and _ _第条,共条 :exc:`werkzeug.exceptions.HTTPException

  • 测试客户端现在可以正确处理多个cookie。

  • 这个 werkzeug.routing.Map 现在有了一个带有默认转换器映射的类属性。这有助于子类在不将转换器传递给构造函数的情况下重写转换器。

  • 实施 OrderedMultiDict

  • 改进了对文件系统上更高效的会话存储的会话支持。还增加了对当前存储在文件系统会话存储中的会话列表的支持。

  • Werkzeug不再使用python时间模块进行解析,这意味着可以解析范围更广的日期。

  • 包装器没有类属性,因此无法交换它使用的dict和list类型。

  • Werkzeug调试器现在应该可以在appengine dev服务器上工作。

  • URL生成器现在支持删除意外参数。以前,它们总是作为查询字符串附加到URL。

  • 探查器现在写入正确的流。

0.5.1版本

(Bugfix 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() 现在接受一个参数,为每个键的每个值返回一对。

  • 现在添加了额外的换行符,多部分分析器可以更好地处理手工制作的多部分请求。这修复了安装工具上载未正确处理的错误(390)

  • 修复了原子馈送生成器中的一些小错误。

  • 修复了客户端cookie头解析区分大小写的错误。

  • 修正了不起作用的弃用警告。

  • 固定包装装载 SharedDataMiddleware .

  • 修复了安全cookie中的一个错误,该错误使本地时间未设置为UTC的服务器上的服务器端过期成为不可能。

  • 修复了交互式调试器的控制台。

版本0.5

4月24日发布,代号Schlagbohrer。

  • 现在需要python 2.4

  • 修正了一个错误 IterIO

  • 补充 MIMEAcceptCharsetAccept 像平常一样工作 Accept 但是对于mimetype和charset有额外的特殊规范化和额外的方便方法。

  • 把服务系统从wsgiref改成了自制的。

  • 这个 Client 现在支持cookies。

  • 增加了 fixers 为Web服务器错误和托管安装副作用提供各种修复的模块。

  • 补充 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黑客。

  • 补充 dump_options_header()parse_options_header()

  • 补充 quote_header_value()unquote_header_value()

  • url_encode()url_decode() 现在接受分隔符参数在 &; 作为对分隔符。魔法开关已经不在了。

  • 所有表单数据分析函数以及 BaseRequest 对象具有参数(或属性)来限制传入字节数(全部或每个字段)。

  • 补充 LanguageAccept

  • 请求对象现在被强制为所有集合的只读。

  • 添加了许多新的集合类,通常重构集合。

  • 测试支持被重构,半未记录 werkzeug.test.File 被替换为 werkzeug.FileStorage .

  • EnvironBuilder 添加并统一以前的distinct create_environ()ClientBaseRequest.from_values() .它们现在都工作得一样,这就不那么令人困惑了。

  • 正式记录了从内部模块导入的未定义行为。这些模块从未作为公共接口公开。

  • 远离的 FileStorage.__len__ 这使得浏览器无法发送所有浏览器都发送的内容长度。

  • SharedDataMiddleware 使用 wrap_file 现在有一个可配置的缓存超时。

  • 补充 CommonRequestDescriptorsMixin

  • 补充 CommonResponseDescriptorsMixin.mimetype_params

  • 补充 werkzeug.contrib.lint

  • 补充 passthrough_errorsrun_simple .

  • 补充 secure_filename

  • 增列 make_line_iter

  • MultiDict 立即复制,而不是向呼叫者显示内部列表 getlist 以及返回列表的迭代函数。

  • 补充 follow_redirectopen() 属于 Client .

  • 为添加了支持 extra_files 在里面 make_runserver()

0.4.1版

(Bugfix版本,2009年1月11日发布)

  • werkzeug.contrib.cache.Memcached 现在接受实现memcache.client接口的对象作为具有服务器地址的字符串列表的替代。现在还有一个 GAEMemcachedCache 连接到Google Appengine缓存。

  • 现在显式地将密钥转换为字节字符串,因为Python2.6不再这样做。

  • url_encode 并且所有调用它的接口现在都支持选项的排序,但是默认情况下这些选项是禁用的。

  • 开发服务器不再解析客户端的地址。

  • 修正了打字错误 werkzeug.test 断了的那个 File .

  • Map.bind_to_environ 使用 Host 如果有的话,现在是标题。

  • 固定的 BaseCache.get_dict (345)

  • werkzeug.test.Client 现在可以运行缓冲的应用程序,在这种情况下,应用程序将自动正确关闭。

  • 固定的 Headers.set ()。之前导致了头段重复。

  • 固定的 Headers.pop (349)。未正确处理默认参数。

  • 修复了中的未绑定本地错误 create_environ (351)

  • Headers 现在与wsgiref更兼容。

  • Template.render 现在接受多个。

  • 对python 2.3的放弃支持

版本0.4

2008年11月23日发布,代号为Schraubenzieher。

  • Client 支持空的 data 现在参数。

  • 修正了一个错误 Response.application 这使得它不可能用作方法修饰器。

  • 会话系统现在应该在appengine上工作了

  • 安全cookie现在可以在具有不同CPU架构的负载平衡环境中正常工作。

  • CacheControl.no_cacheCacheControl.private 行为改变以反映HTTP RFC的可能性。将这些属性设置为 NoneTrue 现在将值设置为“空值”。文档中有更多详细信息。

  • 固定的 werkzeug.contrib.atom.AtomFeed.__call__ .(338)

  • BaseResponse.make_conditional 现在总是回来 self .以前,它不适用于邮件请求等。

  • 修正了布尔属性处理中的错误 htmlxhtml .

  • 为调试器的Pastebin功能添加了优雅的错误处理。

  • 向添加了一个类似列表的接口 Headers (切片和索引现在工作)

  • 修正了一个错误 __setitem__ 方法 Headers 换钥匙时没有把所有钥匙都取下来。

  • 补充 remove_entity_headers 从标题列表中删除所有实体标题(或 Headers 对象)

  • 现在响应自动调用 remove_entity_headers 如果状态代码是304。

  • 修正了一个错误 Href 查询参数处理。以前调用的最后一项 Href 如果是听写的话,处理不当。

  • 头现在支持 pop 操作以更好地使用环境属性。

0.3.1版

(Bugfix版本,2008年6月24日发布)

  • 修复了安全问题 werkzeug.contrib.SecureCookie .

版本0.3

2008年6月14日发布,代号为eur325cat6。

  • 添加了在URL路由中重定向的支持。

  • 补充 AuthorizationAuthorizationMixin

  • 补充 WWWAuthenticateWWWAuthenticateMixin

  • 补充 parse_list_header

  • 补充 parse_dict_header

  • 补充 parse_authorization_header

  • 补充 parse_www_authenticate_header

  • 补充 _get_current_object 方法到 LocalProxy 物体

  • 补充 parse_form_data

  • MultiDictCombinedMultiDictHeadersEnvironHeaders 现在引发特殊键错误,这是 BadRequest 因此,如果您没有捕捉到它们,它们会给出有意义的HTTP响应。

  • 增加了对替代编码错误处理和 HTTPUnicodeError 它(如果没有被抓到)的行为就像 BadRequest .

  • 补充 BadRequest.wrap .

  • 添加了对sharedatamiddleware的etag支持,并添加了禁用缓存的选项。

  • 固定的 is_xhr 在请求对象上。

  • 修复了URL适配器的错误处理 dispatch 方法。(318)

  • 修正了错误 SharedDataMiddleware .

  • 固定的 Accept.values .

  • EnvironHeaders 立即包含内容类型和内容长度

  • url_encode 将传递给它的dict中的列表和元组视为同一键的多个值,这样就不必传递 MultiDict 到函数。

  • 补充 validate_arguments

  • 补充 BaseRequest.application

  • 改进了对python 2.3的支持

  • run_simple 接受 use_debuggeruse_evalex 现在参数,比如 make_runserver 来自脚本模块的工厂函数。

  • 这个 environ_property 现在默认为只读

  • 现在可以将请求初始化为“浅”请求,如果请求对象尝试使用输入流,则会导致运行时错误。

版本0.2

2008年2月14日发布,代号Faustkeil。

  • 补充 AnyConverter 到路由系统。

  • 补充 werkzeug.contrib.securecookie

  • 例外情况有 get_response() 返回响应对象的方法

  • 修正了路径排序错误(293),谢谢托马斯·约翰森。

  • BaseReporterStream 现在是Werkzeug控制模块的一部分。从Werkzeug 0.3起,你必须从那里进口。

  • 补充 DispatcherMiddleware .

  • RequestRedirect 现在是的子类 HTTPException 并使用301状态代码而不是302。

  • url_encodeurl_decode 现在也可以选择将密钥视为Unicode字符串。

  • werkzeug.script 现在布尔参数的调用方格式不同。

  • 更名 lazy_propertycached_property .

  • 补充 import_string .

  • 添加的是请求对象的属性。

  • 补充 empty() 路由规则的方法。

  • 补充 werkzeug.contrib.profiler .

  • 补充 extendsHeaders .

  • 补充 dump_cookieparse_cookie .

  • 补充 as_tupleClient .

  • 补充 werkzeug.contrib.testtools .

  • 补充 werkzeug.unescape

  • 补充 BaseResponse.freeze

  • 补充 werkzeug.contrib.atom

  • httpExceptions接受一个参数 description 现在,它将覆盖默认描述。

  • 这个 MapAdapter 现在具有路径信息的默认值。如果你使用 bind_to_environ 你以后不必经过这条路。

  • 用于dev服务器的wsgiref子类werkzeug不再使用直接sys.stderr日志记录,而是使用名为“werkzeug”的日志记录程序。

  • 实施 Href .

  • 实施 find_modules

  • 将请求和响应对象重构为基本对象、mixin和实现所有mixin的全功能子类。

  • 添加了简单的用户代理分析器

  • Werkzeug的路由提升 MethodNotAllowed 现在,如果它与一个规则匹配,但方法不同。

  • 许多修复和小的改进

版本0.1

2007年12月9日发布,代号为Wictorinoxger。

  • 初始释放