为了账号安全,请及时绑定邮箱和手机立即绑定

请教一下这个问题,升级到Flask 0.11要注意哪些问题?

/ 猿问

请教一下这个问题,升级到Flask 0.11要注意哪些问题?

当年话下 2019-11-26 21:17:26

升级到Flask 0.11要注意哪些问题


查看完整描述

3 回答

?
aluckdog

有哪些变化?

Flask官方文档的变更日志中,提到了一共33处变化。我这里选择性地列出几个比较重大的变化,更详细的内容 请看文档 。

调试

新版本中移除了Flask应用中的 debug_log_format 属性,这意味着如果没有启用调试,那么Flask会默认记录日志,日志记录格式是硬编码在框架中的。不过开发者可以通过新增的 LOGGER_HANDLER_POLICY 配置键停用默认的日志记录程序,从而使用自定义的日志记录器。

模板

除了在调试模式之外,不会再自动重载模板。可以通过新增的 TEMPLATES_AUTO_RELOADT 配置键进行配置。

render_template_string()函数改为默认自动对模板变量进行自动转义,与 render_template() 的行为更加一致。

错误处理

在Flask中,一般推荐按如下方式注册错误处理程序:

@app.errorhandler(werkzeug.exceptions.BadRequest)
def handle_bad_request(e):
return 'bad request!'
在0.11版之前,如果在一个函数上装饰多个错误程序,那么各自的优先级是按照装饰/调用顺序处理。现在则改为按照异常的继承层级,意味着针对更加具体异常的处理程序会优先执行,而不再执行针对更普遍异常的程序。

另外,直接在应用实例上注册处理程序会报ValueError。

最重要的两个变化放到最后。

flask cli

最新的版本集成了Armin自己开发的 click 库,提供了 flask 命令行命令和 flask.cli模块,用于开启本地调试服务器。相对于过去使用 flask.run()方法,使用 flask 命令更快更可靠,而且可以替代 Flask-Script 第三方扩展。

在虚拟环境中安装Flask后,就可以直接在命令行使用 flask 命令。

模块导入

新版中弃用了以 flask.ext 形式导入扩展模块,应该改用 flask_foo。

如果你仍使用原来的形式,Flask 会对每个这样导入的扩展报 flask.exthook.ExtDeprecationWarning 警示。为了便利开发者,Flask团队提供了一个叫做 flask-ext-migrate 的迁移工具,可以自动改写导入语句。

举例来看具体变化:

from flask.ext import foo => import flask_foo as foo
from flask.ext.foo import bam => from flask_foo import bam
import flask.ext.foo => import flask_foo



查看完整回答
反对 回复 2019-11-30
?
慕哥9229398

比如DEBUG。还有些配置变量是关于Flask拓展的,比如BCPYRT_LEVEL就是用于Flask-Bcrypt拓展(一个用于hash映射密码的拓展)。 甚至可以定义在这个应用中用到的自己的配置变量。 在这个例子中,我使用app.config["MAIL_FROM_EMAIL"]来表示邮件

查看完整回答
反对 回复 2019-11-30
?
大话西游666

值得以后注意。具体主要包括以下几个方面。


1、新关键字

Python 3.5中引入了async和await,不建议将这两个名称用作变量名、类名、函数名和模块名。它们将在Python 3.7中正式成为关键字。

2、废弃的方法

mportlib.machinery.SourceFileLoader.load_module()importlib.machinery.SourcelessFileLoader.load_module()方法。

3、废弃的特性

pyvenv脚本被废弃,鼓励使用python3 -m venv。这样可以避免搞错pyvenv所关联的版本。

4、废弃的行为

在生成器内部触发StopIteration异常时,会生成一个DeprecationWarning,到Python 3.7版本时,则会引发运行时错误。具体见PEP 479。



查看完整回答
反对 回复 2019-11-30

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信