Falcon 1.0.0的更改日志

正在中断更改

  • 已删除不推荐使用的全局挂钩功能。 API 不再接受 beforeafter 夸格斯。应用程序可以通过将全局钩子中包含的任何逻辑迁移到中间件组件中来解决这一问题。

  • 中间件方法 process_resource() 现在必须接受额外的 params 参数。这使中间件方法有机会与路由的URI模板中定义的任何字段的值进行交互。

  • 中间件方法 process_resource() 当找不到传入请求的路由时,将跳过。这避免了必须包括 if resource is not None 在实现此方法时进行检查。在没有找到路由的情况下,可以使用接收器来执行逻辑。

  • 添加了一个选项来切换表单参数的自动分析。默认情况下,Falcon将不再自动解析内容类型为“application/x-www-form-urlencoded”的请求。这样做是为了避免使用请求流可能产生意外的副作用。它还使应用程序更容易自定义和扩展表单提交的处理。根据下面的示例,需要此功能的应用程序必须通过设置为此目的添加的新请求选项显式地重新启用它:

    app = falcon.API()
    app.req_options.auto_parse_form_urlencoded = True
    
  • 这个 HTTPUnauthorized 初始值设定项现在需要一个附加参数, challenges .根据RFC7235,返回401的服务器必须包含一个包含至少一个质询的www-authenticate头字段。

  • 提高了响应体的组成性能。作为这项工作的一部分, Response.body_encoded 属性已删除。此属性仅用于框架本身,但可以根据下面的示例迁移任何依赖代码:

    # Before
    body = resp.body_encoded
    
    # After
    if resp.body:
        body = resp.body.encode('utf-8')
    else:
        body = b''
    

新的和改进的

  • A code of conduct 旨在巩固我们社区对维持欢迎、尊重文化的承诺。

  • 现在完全支持CPython 3.5。

  • 添加了常数http_http_http_http_http_和http_

  • 这个 HTTPUnprocessableEntityHTTPTooManyRequestsHTTPUnavailableForLegalReasons 添加了错误类。

  • 这个 HTTPStatus 类现在可以直接在 falcon 模块,并已有适当的文档记录。

  • 对HTTP重定向的支持是通过一组 HTTPStatus 子类。这应该可以避免挂钩和响应器方法可能覆盖重定向的问题。引发这些新重定向类之一的实例将缩短请求处理的过程,类似于引发 HTTPError

  • 默认404响应程序现在引发的实例 HTTPError 而不是直接操作响应对象。这使得可以使用自定义错误处理程序或序列化程序自定义响应主体。

  • 一种新的方法, get_header() ,已添加到 Response .以前没有办法检查是否设置了标题。新的 get_header() 方法简化了这个用例和其他用例。

  • falcon.Request.client_accepts_msgpack() 现在除了“application/x-msgpack”,还可以识别“application/msgpack”。

  • 新的 access_routeremote_addr 属性已添加到 Request 用于获取上游IP地址。

  • RequestResponse 现在支持字节以外的范围单位。

  • 这个 APIStartResponseMock 类类型现在可以通过从继承来自定义 TestBase 并超越 api_classsrmock_class 类属性。

  • 具有多个字段表达式的路径段现在可以定义为与只有一个字段表达式的路径段处于同一级别。例如::

    api.add_route('/files/{file_id}', resource_1)
    api.add_route('/files/{file_id}.{ext}', resource_2)
    
  • 支持已添加到 API.add_route() 通过额外的arg和kwarg到自定义路由器。

  • 现在允许数字和下划线字符出现在 falcon.routing.compile_uri_template() 帮助器,用于自定义路由器实现。

  • 增加了一个新的测试框架,比旧的测试框架更直观。Falcon自己的几个测试被移植到新框架中(剩下的将在随后的版本中移植)。新的测试框架对所有请求执行wsgiref验证。

  • 设置的性能 Response.content_range 提高了约50%。

  • 一个新参数, obs_date ,已添加到 falcon.Request.get_header_as_datetime() ,默认为 False .当不需要支持过时的日期格式时,这将提高方法的性能。

固定的

  • 路由树中给定级别的字段表达式不再屏蔽可选分支。当请求路径中的单个段可以匹配路由树中该分支上的多个节点,并且第一个分支恰好是错误的分支(即,后续节点不匹配,但它们将位于不同的分支下),则可能导致成功的其他分支请求路径的sful解析现在将被尝试,而以前的框架将表现为找不到路由。

  • 当cookie通过 unset_cookie() .

  • 已为通过定义的挂钩添加了支持 functools.partial() .

  • 请求路径中的隧道UTF-8字符现在被正确解码,并且占位符字符被替换为任何无效的代码点。

  • 实例化 context_type 现在延迟到 Request 如果上下文类型自己的初始化依赖于 Request 的属性。

  • 一个案例被修正,其中 stream 使用时可能挂起 wsgiref 以托管应用程序。

  • 默认错误序列化程序现在在响应中设置vary头。实现这一点需要通过 Response 对象,通常是一个中断更改。但是,框架被修改为检测旧式的错误序列化程序,并用填充程序包装它们,使它们与新接口兼容。

  • 包含格式错误的百分比编码的查询字符串不再导致框架引发错误。

  • 由于代码覆盖率报告中的不足,对之前未覆盖的几行代码添加了额外的测试,这些不足已被纠正。

  • 在Jython下安装时,不再显示cython注释。

  • 更正了文档中的几个错误和不明确之处。