发布摘要和更改历史(不译)¶
版本0.13¶
警告
尚未发布。
不再支持生命周期已结束的Python版本。
保持对旧Python版本的支持会阻碍新功能的适配,并且没有实际用途。如果您需要对较旧的Python版本的支持,您可以继续使用Bottle-0.12。已测试和支持的Python版本的更新列表如下:
python 2.7(>=2.7.3)
Python 3.6
Python 3.7
Python 3.8
Python 3.9
PyPy 2.7
PyPy 3.6
PyPy 3.7
从0.12开始,对Python2.5的支持被标记为不推荐使用。我们决定更进一步,同时删除对2.6和3.1到3.5的支持,即使它在Bottle中从未被明确弃用。这意味着此版本是 not 在Python<2.7.3或<3.6环境中向后兼容。仍然使用这些旧Python版本的发行版或系统的维护者不应该更新到瓶子0.13,而应该坚持使用0.12。
稳定的原料药
记录的API
ConfigDict
类现在被认为是稳定的,可以使用了。
不赞成的API
旧的路由语法 (
/hello/:name
)更具可读性和灵活性/hello/<name>
语法。Bottle.mount()
现在识别瓶子实例,并警告与新安装行为不兼容的参数。旧行为(将应用程序作为wsgi可调用挂载)仍然有效,并自动用作回退。无证件者
local_property()
助手现在已被弃用。google app engine的服务器适配器不再有用,标记为已弃用。
瓶子使用pickle将任意对象存储到签名的cookie中。这是安全的,只要签名密钥仍然是秘密的。不幸的是,人们总是倾向于将带有签名密钥的代码推送到Github,所以我们决定从瓶子中删除pickle支持。如果值不是字符串,签名的cookie现在将发出一个取消预测警告,对非字符串值的支持将在0.14中删除。全球
cookie_encode()
,cookie_decode()
和is_cookie_encoded()
现在也不赞成。如果您正在使用此功能,请考虑在将对象存储到cookie中之前使用json对其进行序列化,或者切换到存储数据服务器端而不是客户端的会话系统。
已删除的API(从0.12起已弃用)
使用旧API的插件 (
api=1
或者没有api属性)将不再工作。参数顺序
Bottle.mount()
在0.10中更改。旧订单现在将导致错误而不是警告。这个
ConfigDict
课程在0.11引入,在0.12期间更改。这些变化现在是最终的。由于高开销和有限的可用性,属性访问和分配被删除。
已删除命名空间子实例创建。
config["a"]["b"]
管理费用高,效益不大config["a.b"]
.ConfigDict
实例不再可调用。这是一条捷径ConfigDict.update()
.ConfigDict
构造函数不再接受任何参数。使用 load_* 方法。
瓶子0.12改变了简单模板引擎的一些方面。这些更改现在是最终的,旧的语法现在可以工作更长时间。
魔法
{{{{rebase()}}}}
呼叫被替换为base
变量。例子:{{{{base}}}}
在stpl模板中,“rebase”和“include”关键字替换为0.12中的函数。
不再识别PEP-263编码字符串。模板始终是UTF-8。
“geventsockatino”服务器适配器已被删除,恕不另行通知。无论如何,它都不起作用。
变化
更新时,这些更改可能需要特别注意。
签名cookie现在默认使用更强大的HMAC算法。这将导致旧cookie在更新后显示为无效。传递显式
digestmod=hashlib.md5
到Request.get_cookie()
和Response.set_cookie()
以获得旧的行为。
其他改进
bottle()实例现在是上下文管理器。如果在WITH语句中使用,则默认应用程序将更改为特定实例,并且可以使用许多实例方法的快捷方式。
为添加了支持
PATCH
请求和Bottle.patch()
装饰者。为json或ini文件中的config添加了命令行参数。
Bottle.mount()
现在识别Bottle
并且,与其他WSGi应用程序相比,装载它们的开销要少得多。这个
Request.json
属性现在接受application/json-rpc
请求。static_file()
获得支持ETag
标题。它将生成etags并识别If-None-Match
标题。Jinja2模板将产生比以前更好的错误消息。
版本0.12¶
新的SimpleTemplate解析器实现
支持多行代码块 (<% ... %> )
关键词 include 和 rebase 现在是函数,可以接受变量模板名称。
新的
BaseRequest.route
属性返回Route
最初与请求匹配的。移除
BaseRequest.MAX_PARAMS
限制。cpythons dict()实现中的哈希冲突错误在一年前就被修复了。如果您仍在生产中使用python 2.5,请考虑升级,或者至少确保从您的分发服务器上修复了安全性。新的
ConfigDict
API(见 配置文件(初稿) )
更多信息请参见 development blog post .
版本0.11¶
对python 2.x和3.x语法的本机支持。不再需要运行2to3。
支持部分下载 (
Range
标题)在static_file()
.新的
ResourceManager
接口帮助定位与应用程序捆绑的文件。为添加了服务器适配器 waitress .
新的
Bottle.merge()
方法将所有路由从一个应用程序安装到另一个应用程序。新的
BaseRequest.app
属性获取处理请求的应用程序对象。补充
FormsDict.decode()
获取所有Unicode版本(WTForms需要)。MultiDict
子类现在可以腌制。
API更改
Response.status
是一个读写属性,可以为其分配数字状态代码或带有原因短语的状态字符串 (200 OK
)。返回值现在是一个字符串,以便更好地匹配现有的API(webob、werkzeug)。要完全清楚,可以使用只读属性BaseResponse.status_code
和BaseResponse.status_line
.
API折旧
SimpleTALTemplate
现在正在贬值。似乎没有需求。
版本0.10¶
插件API v2
要使用新的API,请设置
Plugin.api
到2
.Plugin.apply()
接收Route
对象,而不是作为第二个参数的上下文字典。新对象提供了一些附加信息,将来可能会扩展。插件名称现在被认为是唯一的。已安装给定路由上具有给定名称的最顶层插件,所有其他具有相同名称的插件将被静默忽略。
请求/响应对象
补充
BaseRequest.json
,BaseRequest.remote_route
,BaseRequest.remote_addr
,BaseRequest.query
和BaseRequest.script_name
.补充
BaseResponse.status_line
和BaseResponse.status_code
属性。在未来的版本中,BaseResponse.status
将返回一个字符串(例如200 OK
)而不是与其他通用框架的API匹配的整数。为了使转换尽可能顺利,从现在开始应该使用verbose属性。已替换
MultiDict
有一个专门的FormsDict
在很多地方。新的dict实现允许属性访问并透明地处理unicode表单值。
模板
向处理未定义变量的SimpleTemplate默认命名空间添加了三个新函数:
stpl.defined()
,stpl.get()
和stpl.setdefault()
.SimpleTemplate的默认转义函数现在额外转义单引号和双引号。
路由
新的路由语法(例如
/object/<id:int>
)以及对路由通配符过滤器的支持。四个新的通配符筛选器: int , float , path 和 re .
其他变化
添加了用于加载应用程序和启动服务器的命令行界面。
介绍了一个
ConfigDict
这使得访问配置更加容易(属性访问和自动扩展名称空间)。增加了对原始wsgi应用程序的支持
Bottle.mount()
.Bottle.mount()
参数顺序已更改。Bottle.route()
现在接受callback
参数。放下了Gunicorn 0.8支架。当前支持的版本为0.13。
向Gunicorn服务器添加了自定义选项。
最后放弃了对类型过滤器的支持。替换为所需的自定义插件。
版本0.9¶
有什么新消息吗?
这个
route()
装饰师有很多新特性。参见Bottle.route()
有关详细信息。支持简单模板。
在调试模式下更好地处理mako模板的运行时异常。
大量的文档、修复和小的改进。
一个新的
Request.urlparts
财产。
性能改进
这个
Router
现在是特殊情况wsgi.run_once
加速CGI的环境。在谷歌应用引擎上支持“应用缓存”。参见 af93ec .
一些很少使用或不推荐使用的功能现在是插件,可以避免不使用该功能时的开销。
API更改
这个版本主要是向后兼容的,但是一些API现在被标记为不推荐使用,将在下一个版本中被删除。最值得注意的是:
这个
static
路由参数已弃用。你可以用反斜杠来逃脱野牌。不推荐使用基于类型的输出筛选器。它们很容易被插件替换。
版本0.8¶
API更改
这些更改可能会破坏与以前版本的兼容性。
内置的键/值数据库不再可用。从0.6.4开始标记为已弃用
路由语法和行为发生了变化。
正则表达式必须用
#
.在0.6中,允许正则表达式中不存在的所有非字母数字字符。不属于路由通配符的正则表达式将自动转义。您不再需要转义点或其他常规控制字符。在0.6中,整个URL被解释为正则表达式。可以使用匿名通配符 (
/index:#(\.html)?#
)达到类似的行为。
这个
BreakTheBottle
例外情况消失了。使用HTTPResponse
相反。这个
SimpleTemplate
引擎转义HTML特殊字符{{{{bad_html}}}}
表达式自动。使用新的{{{{!good_html}}}}
获取旧行为的语法(不转义)。这个
SimpleTemplate
引擎返回Unicode字符串而不是字节字符串列表。bottle.optimize()
自动路径优化已经过时。一些函数和属性已重命名:
Request._environ
is nowRequest.environ
Response.header
is nowResponse.headers
default_app()
已过时。使用app()
相反。
默认值
redirect()
代码从307更改为303。拆下的支架
@default
. 使用@error(404)
相反。
新特点
这是新功能和改进功能的不完整列表。
这个
Request
对象获得了新属性:Request.body
,Request.auth
,Request.url
,Request.header
,Request.forms
,Request.files
.这个
Response.set_cookie()
和Request.get_cookie()
方法现在可以对Python对象进行编码和解码。这叫A 安全cookie 因为编码值是有符号的,并且不受客户端更改的保护。允许所有可酸洗的数据结构。新的
Router
类大大提高了具有大量动态路由的设置的性能,并支持命名路由(命名路由+dict=url字符串)。现在可以(并建议)返回
HTTPError
和HTTPResponse
实例或其他异常对象,而不是引发它们。新功能
static_file()
等于send_file()
但返回AHTTPResponse
或HTTPError
而不是提高它。send_file()
被贬低。这个
SimpleTemplate
引擎得到了完整的Unicode支持。很多非关键的错误修复。
贡献者¶
瓶子由marcel hellkamp<marc@bottlepy.org>编写和维护。
感谢所有发现错误、发送补丁、传播消息、在邮件列表中互相帮助并使这个项目成为可能的人。我希望下面(按字母顺序排序)的列表是完整的。如果你错过了名单上的名字(或希望删除你的名字),请 tell me 或者自己添加。
阿卡萨朱
亚当·R·史密斯
亚历克赛·博岑科夫
亚历克西斯·达博维尔
安东·I·西波斯
安东·科勒奇金
APEXI200SX公司
蚜虫
BillMa
布拉德·格林利
布兰登·吉尔摩
布兰科·武克利奇
布赖恩·西拉科夫斯基
布赖恩威克曼
卡尔·谢伦伯格
达米安·德戈瓦
大卫·巴克斯顿
杜安·约翰逊
福卡迈尔
弗兰克·墨菲
弗雷德里克·朱诺德
黄金制造厂3012
格雷格·米尔比
黄体酮
伊恩·戴维斯
伊塔玛·纳布瑞奇
西尔维奥
杰米·默多克
杰夫·尼科尔斯
杰里米·凯利
乔格斯特
约翰内斯·克拉姆夫
乔纳斯·哈格
乔舒亚·罗斯林
朱德森·尼尔
卡尔
凯文·祖伯
海怪
凯尔·弗里茨
M35型
马科斯·内维斯
马斯克林
迈克尔·拉布
迈克尔·苏利埃
尼古拉斯·万霍伦
奥兹N提拉姆
罗伯特·罗林斯
罗杰雷恩斯
RWxRWX型
圣地亚哥加拉
肖恩·M·柯林斯
塞巴斯蒂安·沃尔拉斯
赛斯
西格德·H·格斯布罗
斯图尔特·拉卡姆
孙宁
Tom_s A.Schertel
特里斯坦·扎琼克
伏特隆
威兰·霍夫曼
僵尸
蒂亚戈·阿维利诺