大型应用¶
以下是一些建议,当你的代码库日益壮大或者应用需要规划时可以参考。
阅读源代码¶
Werkzeug ( WSGI )和 Jinja (模板)是两个被广泛使用的工具,而 Flask 起源就是用于展示如何基于这两个工具创建你自己的框架。随着不断地开发, Flask 被越来越多的人认可了。当你的代码库日益壮大时,不应当仅仅是使用 Flask ,而更应当理解它。所以,请阅读 Flask 的源代码吧。 Flask 的源代码阅读方便,文档公开,有利于你直接使用内部的 API 。 Flask 坚持把上游库的 API 文档化,并文档化自己内部的工具,因此通过阅读源代码,可以为你的项目找到更好的切入点。
挂接,扩展¶
API 文档随处可见可用重载、挂接点和 信号 。你可以定制类似请求或响应对象的自定义类。请深入研究你所使用的 API ,并在 Flask 发行版中有哪些可以立即使用的可定制部分。请研究你的哪些项目可以重构为工具集或 Flask扩展。你可以在社区中发现很多 扩展 。如果找不到满意的,那就写一个你自己的吧。
继承¶
Flask
类有许多方法专门为继承而设计。你可通过继承Flask
(参见链接的方法文档)快速的添加或者定制行为,并把子类实例化为一个应用类。这种方法同样适用于 应用工厂 。示例参见继承 Flask 。
用中间件包装¶
应用调度 一文中详细阐述了如何使用中间件。你可以引入中间件来包装你的 Flask 实例,在你的应用和 HTTP 服务器之间的层有所作为。Werkzeug 包含许多 中间件 。
派生¶
如果以下建议都没有用,那么直接派生 Flask 吧。 Flask 的主要代码都在Werkzeug 和 Jinja2 这两个库内。这两个库起了主要作用。 Flask 只是把它们粘合在一起而已。对于一个项目来讲,底层框架的切入点很重要。因为如果不重视这一点,那么框架会变得非常复杂,势必带来陡峭的学习曲线,从而吓退用户。
Flask 并不推崇唯一版本。许多人为了避免缺陷,都使用打过补丁或修改过的版本。这个理念在 Flask 的许可中也有所体现:你不必返回你对框架所做的修改。
分支的缺点是大多数扩展都会失效,因为新的框架会使用不同的导入名称。更进一步:整合上游的变动将会变得十分复杂,上游变动越多,则整合越复杂。因此,创建分支一般是不得不为之的最后一招。
专家级的伸缩性¶
对于大多数网络应用来说,最复杂的莫过于对于用户量和数据量提供良好的伸缩性。Flask 本身具有良好的伸缩性,其伸缩性受限于你的应用代码、所使用的数据储存方式、 Python 实现和应用所运行的服务器。
如果服务器数量增加一倍,你的应用性能就增加一倍,那么就代表伸缩性好。如果伸缩性不好,那么即使增加服务器的数量,也不会得到更好的性能。伸缩性更差的甚至不支持增加第二台服务器。
Flask 中唯一影响伸缩性的因素是环境本地代理。Flask 中的环境本地代理可以被定义为线程、进程或 greenlet 。如果你的服务器不支持这些,那么 Flask 就不能支持全局代理。但是,当今主流的服务器都支持线程、进程或 greenlet ,以提高并发性。 Flask 的基础库 Werkzeug 对于线程、进程或 greenlet 都能够提供良好的支持。
与社区沟通¶
不管你的代码库是否强大, Flask 开发者总是保持框架的可操作性。如果发现Flask 有什么问题,请立即通过邮件列表或 IRC 与社区进行沟通。对于 Flask 及其扩展的开发都来说,提升其在大型应用中的功能的最佳途径是倾听用户的心声。
原文: https://dormousehole.readthedocs.io/en/latest/becomingbig.html