变大

以下是在扩展代码库或扩展应用程序时的选项。

阅读资料来源。

Flask开始部分地演示如何在现有的使用良好的工具Werkzeug(wsgi)和Jinja(模板)之上构建自己的框架,随着它的发展,它对广泛的观众变得有用。随着代码库的增长,不要只使用Flask——理解它。阅读资料来源。flask的代码是为读取而编写的;它的文档是发布的,因此您可以使用它的内部API。flask坚持使用上游库中文档化的API,并记录其内部实用程序,这样您就可以找到项目所需的钩子点。

钩子。延伸。

这个 API 文档中充满了可用的覆盖、挂接点和 信号 . 您可以为请求和响应对象等对象提供自定义类。深入研究您所使用的api,并在Flask版本中寻找现成的定制。寻找可以将项目重构为实用程序和烧瓶扩展集合的方法。探索众多 扩展 在社区中,如果找不到所需的工具,请寻找构建自己的扩展的模式。

子类。

这个 Flask 类有许多设计用于子类化的方法。您可以通过子类化快速添加或自定义行为 Flask (参见链接方法文档)并在实例化应用程序类的任何位置使用该子类。这个很好用 应用工厂 . 见 子类Flask 举个例子。

用中间件包装。

这个 应用程序调度 模式详细说明了如何应用中间件。您可以引入WSGI中间件来包装您的Flask实例,并在Flask应用程序和HTTP服务器之间的层上引入修复和更改。Werkzeug包括几个 middlewares .

Fork 。

如果上述选项都不起作用,则使用叉式Flask。Flask的大部分代码在Werkzeug和Jinja2内。这些类库承担了大部分工作。Flask就是把它们粘在一起的糊状物。对于每个项目,都有一个基础框架阻碍的地方(由于原始开发人员的假设)。这是自然的,因为如果不是这样的话,框架将是一个非常复杂的系统,开始时会导致弯曲的学习曲线和大量的用户沮丧。

这对Flask来说不是唯一的。许多人使用他们的框架的补丁和修改版本来应对缺点。这个想法也反映在Flask许可证上。如果你决定修改框架,就不必进行任何更改。

复刻的缺点当然是Flask扩展很可能会中断,因为新框架具有不同的导入名称。此外,根据变更的数量,整合上游变更可能是一个复杂的过程。因此,复刻应该是最后的选择。

像专业人员一样收缩。

对于许多Web应用程序来说,代码的复杂性并不是一个问题,而是用户数量或数据条目的收缩量性。flask本身仅限于根据应用程序代码、要使用的数据存储以及运行的Python实现和Web服务器进行扩展。

良好的收缩性意味着,例如,如果将服务器数量增加一倍,性能就会提高一倍左右。缩放不良意味着如果添加一个新服务器,应用程序的性能将不会更好,甚至不支持第二个服务器。

关于Flask中的缩放,只有一个限制因素,即局部情境代理。它们取决于在Flask中被定义为线程、进程或greenlet。如果您的服务器使用某种不基于线程或greenlet的并发,那么flask将无法再支持这些全局代理。然而,大多数服务器都使用线程、greenlet或单独的进程来实现并发性,这些都是底层werkzeug库所很好支持的所有方法。

与社区讨论。

Flask开发人员让拥有大大小小代码库的用户都可以访问框架。如果你发现一个障碍,在你的道路上,造成烧瓶,不要犹豫,联系开发人员的邮件列表或不和谐的服务器。对于Flask和Flask扩展开发人员来说,为更大的应用程序改进工具的最好方法是从用户那里获得反馈。