Falcon 3.1.0的更改日志

总结

该版本对请求验证和错误处理进行了一些改进,并对静态和可下载文件的响应处理进行了一些调整。

由于民众的需求, TestClientASGIConductor 现在公开方便快捷的别名 simulate_* 方法,即, simulate_get() 现在还提供了 get() 等。

还修复了一些重要的错误,以确保应用程序正确清理响应流,并且在读取使用分块传输编码流传输的请求正文时不会挂起。

此版本还添加了对CPython3.10的支持,并不推荐使用CPython3.6。

对支持平台的更改

  • 现在完全支持CPython3.10。 (#1966 _)

  • 对Python3.6的支持现在已弃用,并将在Falcon4.0中删除。

  • 与上一版本一样,Python3.5支持仍处于弃用状态,在Falcon4.0中将不再受支持。

新的和改进的

  • 这个 jsonschema.validate 修饰器现在引发一个 MediaValidationError 而不是泛型 HTTPBadRequest 对于请求媒体验证失败。虽然默认行为以向后兼容的方式保持不变(因为专用异常是泛型异常的子类),但现在可以通过为新类添加错误处理程序轻松地对其进行定制。 (#1320 _)

  • 由于民众的需求, TestClientASGIConductor 现在公开方便快捷的别名 simulate_* methods, i.e., simulate_get() is now also available as get(), etc. (#1806 )

  • 这个 Request.range 属性现在具有更严格的验证:

    • 当解析带有最后一个字节位置的字节范围规范时,它必须大于或等于第一个字节位置。

    • 分析后缀字节范围规范时,后缀长度必须为正数。

    Static routes 现在支持 Range requests. This is useful for streaming media and resumable downloads. (#1858 )

  • 添加了一个 Response.viewable_as 属性;这类似于 Response.downloadable_as 但具有“内联”处理类型,因此响应仍将显示在浏览器中。 (#1951 _)

  • 添加了对传球的支持 pathlib.Path 对象为 directory in the add_static_route() method on all targeted Python versions. (#1962 )

  • Static routes 现在设置 Content-Length header indicating a served file's size (or length of the rendered content range). (#1991 )

  • 当使用过时的位置参数调用时,方法和类初始值设定项(如 falcon.HTTPError )现在将发出一个更便于用户使用的警告,指示相关方法的完全限定名。 (#2010 _)

固定的

  • 如果提供,则 close() method of an ASGI resp.stream is now guaranteed to be called even in the case of an exception raised while iterating over the data. (#1943 )

  • 以前,当通过ASGI静态路由提供服务时,文件可能会保持打开状态(取决于底层GC实现)。已修复此问题,现在文件在呈现响应后显式关闭。 (#1963 _)

  • 当请求使用分块传输编码(没有 Content-Length known in advance), iterating over req.stream could hang until the client had disconnected. This bug has been fixed, and iteration now stops upon receiving the last body chunk as expected. (#2024 )

杂项

  • 这个 compile_uri_template() 实用程序方法已弃用,将在Falcon 4.0中删除。此函数仅在框架的早期版本中使用,预计已完全被 CompiledRouter 。在不太可能的情况下,它仍在活跃使用,其源代码可以简单地复制到受影响的应用程序中。 (#1967 _)

此版本的贡献者

非常感谢本次发布的所有贡献者!