What’s new in Tornado 2.1

Sep 20, 2011

Backwards-incompatible changes

  • 删除了对1.0版之前的Tornado编写的安全cookie的支持. RequestHandler.get_secure_cookie方法不再采用include_name参数.

  • 现在, debug应用程序设置将导致堆栈跟踪在未捕获的异常情况下显示在浏览器中. 由于这可能会泄漏敏感信息,因此不建议将调试模式用于面向公众的服务器.

Security fixes

  • Diginotar已从SimpleAsyncHTTPClient使用的默认CA证书文件中SimpleAsyncHTTPClient .

New modules

tornado.web

  • tornado.web.RequestHandler.write_error替换get_error_html作为生成自定义错误页面的首选方法(仍然支持get_error_html ,但已弃用)

  • In tornado.web.Application, handlers may be specified by (fully-qualified) name instead of importing and passing the class object itself.

  • 现在可以使用的自定义子类StaticFileHandlerstatic_handler_class应用程序设置,这个子类可以重写的行为static_url方法.

  • StaticFileHandler子类现在可以覆盖get_cache_time以自定义缓存控制行为.

  • 现在, tornado.web.RequestHandler.get_secure_cookie具有max_age_days参数,以允许应用程序覆盖默认的一个月有效期.

  • set_cookie现在接受max_age关键字参数来设置max-age cookie属性(注意下划线与破折号)

  • 可能会覆盖tornado.web.RequestHandler.set_default_headers ,以在错误处理期间不会重置的方式设置标头.

  • 现在可以使用RequestHandler.add_header设置可以在响应中多次出现的标头.

  • 现在, RequestHandler.flush可以接受回调以进行流控制.

  • 现在可以压缩application/json内容类型.

  • cookie签名函数现在可以作为静态函数tornado.web.create_signed_valuetornado.web.decode_signed_value .

tornado.httpserver

  • 为了促进一些高级的多进程方案, HTTPServer提供了一个新方法add_sockets ,并且套接字打开代码可以作为tornado.netutil.bind_sockets单独tornado.netutil.bind_sockets .

  • cookies属性现在在tornado.httpserver.HTTPRequesttornado.httpserver.HTTPRequest (它在旧位置也可以作为RequestHandler的属性使用)

  • 现在, tornado.httpserver.HTTPServer.bind需要一个积压参数,其含义与socket.listen相同.

  • HTTPServer现在可以在unix套接字和TCP上运行.

  • 修复了在启动socket.AI_ADDRCONFIG不可用时的异常,例如在Windows XP上

IOLoop and IOStream

  • IOStream性能已得到改善,尤其是对于小型同步请求.

  • 新方法tornado.iostream.IOStream.read_until_closetornado.iostream.IOStream.read_until_regex .

  • IOStream.read_bytesIOStream.read_until_close现在采用streaming_callback参数来返回接收到的数据,而不是一次全部返回.

  • IOLoop.add_timeout now accepts datetime.timedelta objects in addition to absolute timestamps.

  • 现在, PeriodicCallback坚持指定的时间段,而不是以后由于累积的错误而爬行.

  • 现在, tornado.ioloop.IOLooptornado.httpclient.HTTPClient具有close()方法,这些方法应在创建和销毁许多对象的应用程序中使用.

  • 现在可以使用IOLoop.install来将IOLoop.install的自定义子类用作没有猴子补丁的单例.

  • IOStream现在应始终在发生连接错误时始终调用close回调而不是connect回调.

  • IOStream close回调将不再被调用,而缓冲数据可以满足未决的读取回调.

tornado.simple_httpclient

  • 现在支持带有tornado.httpclient.HTTPRequestclient_keyclient_cert参数的客户端SSL证书

  • 现在需要最大缓冲区大小,以允许读取大于100MB的文件

  • 现在可用于不发送Content-Length标头的HTTP 1.0服务器

  • HTTP客户端请求上的allow_nonstandard_methods标志现在允许POSTPUT以外的方法包含主体.

  • 修复了文件描述符泄漏和SimpleAsyncHTTPClient多个回调调用

  • 跟随重定向时不再消耗额外的连接资源.

  • 现在可以与错误的Web服务器一起使用,这些Web服务器使用\n而不是\r\n\r\n分隔标题.

  • 现在正确设置response.request_time .

  • 现在,连接超时可以正常工作.

Other modules

  • 现在,当回调URI位于其他域时, tornado.auth.OpenIdMixin使用正确的领域.

  • tornado.autoreload具有新的命令行界面,可用于包装任何脚本. 这取代了--autoreload参数tornado.testing.main ,反对语法错误更稳健.

  • tornado.autoreload.watch可用于监视除导入模块源之外的文件.

  • tornado.database.Connection具有executeexecutemany新变体,它们返回受影响的行数,而不是最后插入的行ID.

  • 现在, tornado.locale.load_translations可以接受任何格式正确的语言环境名称,而不仅限于预定义的LOCALE_NAMES列表中的名称.

  • 现在, tornado.options.define可以使用一个group参数来对--help输出中的选项进行分组.

  • 模板加载器现在使用namespace构造函数参数将条目添加到模板名称空间.

  • tornado.websocket now supports the latest (“hybi-10”) version of the protocol (the old version, “hixie-76” is still supported; the correct version is detected automatically).

  • tornado.websocket现在可以在Python 3上使用

Bug fixes

  • Windows支持已得到改进. Windows仍然不是官方支持的平台,但是测试套件现在可以通过并且tornado.autoreload可以运行.

  • 现在可以上传名称包含特殊字符的文件.

  • 包含特殊字符的Cookie值现在已正确加引号和未加引号.

  • 现在支持多行标题.

  • HTTPServer现在支持重复的Content-Length标头(可能由某些代理添加).

  • Unicode字符串文字现在可以在模板表达式中使用.

  • 即使应用程序使用名为modules的模板变量,模板{% module %}指令现在也可以工作.

  • 现在,带有"期望:100-继续"的请求可在python 3上使用