专注于可测试性和可重用性的Web框架
项目描述
Avalanche是一个专注于可测试性和可重用性的Python Web框架
它使用Jinja2作为默认模板系统,并且不包含任何持久层。
Avalanche的目标(或为什么还需要另一个Web框架?)
可测试性
Avalanche的设计使其能够(对您来说)编写良好的单元测试。这不仅仅是使测试变得容易。单元测试应该
在失败时提供清晰的错误信息
仅在测试的功能有问题时失败,而不是在每次代码更改时
快速
可重用性
大多数框架都声称某种形式的可重用性是它们的设计目标之一。Avalanche的“可重用性”目标意味着 源代码 可重用性。
许多框架提供了一些用于可重用/可插拔 子应用程序 的机制,但是当需要配置/修改这些应用程序的源代码时,并不总是容易重用这些应用程序的源代码。可插拔应用程序也是一个非常重要的功能,但截至目前,Avalanche尚不支持该功能。
不仅应该能够编写可重用代码,而且代码在第一次编写时就应该是可重用的。不应该建议以某种方式编写代码,然后后来又必须修改它以使其可重用。例如,它反对说“使用 视图 (处理程序)函数”。然后… “如果你想让你的 视图 可重用,请将它们转换为基于类的 视图!”。
当然,Avalanche不会创造奇迹。可测试性和可重用性最终将取决于应用程序代码。但框架在建立 正确 的路径上发挥着重要作用。
以下列出了目标,希望阅读设计和教程后,您能清楚地了解这些目标是如何实现的。
项目详情
Avalanche设计
超越MVC(模型-视图-控制器)
MVC是一种软件架构模式,旨在将“领域逻辑”与用户界面隔离。这种关注点的分离使得创建更好的应用程序代码成为可能。这种模式在许多桌面框架中非常成功,因此成为创建Web框架的参考。问题是这种架构不能直接映射到Web应用程序的工作方式。
即使是所谓的MVC框架实际上也不是真正的MVC。所以我们只保留MVC的目标。即编写干净、可重用和可测试的代码。
Web应用程序
本质上,Web应用程序所做的就是接收一个HTTP请求,处理它并生成一个HTTP响应。
+------------------+ HTTP Request ------>| web application + -----> HTTP Response +------------------+
发送和接收HTTP由Web服务器处理,所以我们不需要担心这一点。让我们更详细地看看Web应用程序是如何生成HTTP响应的。
+------+ +-------+ HTTP request ---->|router|----->|handler|----> HTTP response +------+ +-------+
路由器将分析请求并将其调度到请求处理器,该处理器将创建响应。
请求处理器风格
- 主要有三种请求处理器风格。
单个函数
类方法
类
Avalanche使用第三种风格,即类。使用类作为请求处理器更适合我们的目标,因为它提供了更大的灵活性,更容易修改/扩展和重用处理器的一部分。
请求处理器处理
请求处理器处理可以分为三个阶段
+-----------------+ +------------+ +----------+ request ---->| param converter |---- param objects ---->| processing |--- context ----->| renderer |----> response +-----------------+ +------------+ +----------+
参数转换器 - 从HTTP请求中获取参数
HTTP是一种文本协议,应用程序通常会从请求中获取一些参数,并将字符串值转换为一些本地数据类型。这些参数来自URI路径、URI查询、POST数据、cookies等。
这就是您将编写一些粘合代码来将HTTP映射到您的应用程序代码的地方。
处理/上下文构建器
处理是应用程序逻辑。它通常会访问持久层(有时称为模型,但这完全取决于应用程序代码和Web框架在此没有作用)。它也可能触发其他操作,如进行批量处理或访问第三方应用程序。请注意,通常这种应用程序逻辑独立于HTTP。
这种处理也可能包括简单的数据检索。在这种情况下,处理可能会生成一个上下文。上下文是一个术语,用于表示渲染器用于创建HTTP响应的数据。
网页通常由几个元素组成,所以有时将工作分成多个“上下文构建器”是有意义的。
渲染器 - 生成输出
渲染器将应用程序处理的结果转换为文本以创建HTTP响应。渲染器通常使用模板系统生成HTML代码或将数据转换为JSON。
在avalanche中,您应该分别编写处理器的三个阶段的代码,让框架将不同的部分组合在一起。
继续阅读教程,了解具体的样子。
项目详情
avalanche-0.3.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 55c55ddc72e8541f3b272ed4a332b9d3a53d2371b19261b110a5a39e2e3b3a4b |
|
MD5 | 14df1cc3ce8fc812e4d57f7bfeaf0cf1 |
|
BLAKE2b-256 | 1365a96515ba5170d2a04906e4a4d1383b22219ced1d98bfa8cdf02a66dd277d |