笨鸟编程-零基础入门Pyhton教程

 找回密码
 立即注册

Flask 中的设计决策

发布者: 笨鸟自学网



微与依赖

为什么 Flask 把自己叫做微框架,并且它依赖于两个库(也就是 Werkzeug 和 Jinja 2)。为什么不能?如果我们仔细审查 Ruby 的 web 开发,有一个非常 类似 WSGI 的协议。被称作 Rack 的就是它,但是除此之外,它看起来非常像 一个 WSGI 的 Ruby 实现。但是几乎所有的 Ruby 应用不直接使用 Rack ,而是 基于一个相同名字的库。这个 Rack 库与 Python 中的两个库不相伯仲: WebOb (以前叫 Paste ) 和 Werkzeug。 Paste 依然在使用,但是从我的理解,它有 些过时,而赞同 WebOb 。 WebOb 和 Werzeug 的开发是一起开始的,也有着同样 的理念:为其它应用的利用做一个 WSGI 的良好实现。

Flask 是一个受益于 Werkzeug 妥善实现 WSGI 接口(有时是一个复杂的任务) 既得成果的框架。感谢 Python 包基础建设中近期的开发,包依赖不再是问题, 并且只有很少的原因反对依赖其它库的库。

线程局域变量

Flask 为请求、会话和一个额外对象(你可以在 g 上放置自己的东 西)使用线程局域对象(实际上是上下文局域对象,它们也支持 greenlet 上下文)。 为什么是这样,这不是一个坏主意吗?

是的,通常情况下使用线程局域变量不是一个明智的主意。它们在不基于线程概念的 服务器上会导致问题,并且使得大型应用难以维护。但 Flask 不仅为大型应用或异步 服务器设计。 Flask 想要使得编写一个传统 web 应用的过程快速而简单。

一些关于基于 Flask 大型应用的灵感,见文档的 聚沙成塔 一节。

Flask 是什么,不是什么?

Flask 永远不会包含数据库层,也不会有表单库或是这个方向的其它东西。 Flask 只建立 Werkezug 和 Jinja2 的桥梁,前者实现一个合适的 WSGI 应用,后者处理 模板。 Flask 也绑定了一些通用的标准库包,比如 logging 。其它所有一切取决 于扩展。

为什么是这样?众口难调,因此 Flask 不强制把特异的偏好和需求囊括在核心里。 大多数 web 应用都可以说需要一个模板引擎,但并不是每个应用都需要一个 SQL 数据库。

Flask 的思想是为所有应用建立一个良好的基础,其余的一切都取决于你和扩展。

123
上一篇:API下一篇:HTML/XHTML 常见问题

Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )

GMT+8, 2024-9-8 09:30 , Processed in 0.021222 second(s), 17 queries .

© 2001-2020

返回顶部