路由系统Flask 使用 Werkzeug 路由系统,其被设计为按复杂度自动为路由排序。这意味着, 你可以任意顺序声明路由,而且他们仍会按期望工作。这在你想正确地实现基于装饰 器的路由是必须的,因为当应用被分割为多个模块时装饰器可以以未定义的顺序调用。 另一个 Werkzeug 路由系统的设计决策是, Werkzeug 中的路由试图确保 URL 是唯 一的。 Werkzeug 对此会做的足够多,因为它在路由不明确时自动重定向到一个规 范的 URL 。 某个模板引擎Flask 在模板引擎上做了决定: Jinja2 。为什么 Flask 没有一个即插的模板引擎 接口?显然,你可以使用一个不同的模板引擎,但是 Flask 仍然会为你配置 Jinja2 。虽然 Jinja2 总是 配置的限制可能会消失,但绑定一个模板引擎并使用 的决策不会。 模板引擎与编程语言类似,每个模板引擎都有特定的理解事物工作的方式。表面上, 它们以相同方式工作:你给引擎一个变量的集合让它为模板求值,并返回一个字符 串。 然而,关于相同点的论述结束了。例如 Jinja2 有一个全面的过滤器系统,一个可靠 的模板继承方式,可以从模板内和 Python 代码内使用复用块(宏)的支持,对所有 操作使用 Unicode,支持迭代模板渲染,可配置的语法等等。其它的引擎,一个类似 Genshi——基于 XML 流求值的引擎,模板继承要考虑 XPath 可用性等等。而 Mako 像 对待 Python 模块一样处理模板。 当把一个模板引擎跟一个应用或框架联系到一起,就不只是渲染模板了。比如, Flask 使用 Jinja2 全面的自动转义支持。同样,也提供了从 Jinja2 模板中 访问宏的途径。 不去掉模板引擎的独特特性的模板抽象层是一门对自身的科学,也是像 Flask 的微框架的巨大事业。 此外,扩展也可以简易地依赖于一个现有的模板语言。你可以简单地使用你自己的 模板语言,而扩展会始终依赖于 Jinja 本身。 |
Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )
GMT+8, 2024-9-8 09:14 , Processed in 0.026860 second(s), 17 queries .