py4web 是什么?

PY4WEB 是一个用于快速开发的高效数据库驱动的网络应用程序的网络框架。它是流行的 web2py 框架的演变,但更快更灵活。与 web2py 相比,它的内部设计已经大大简化。

PY4WEB 可以被视为其他框架诸如 Django 或 Flask 的竞争者,它确实可以实现相同的目的。然而,PY4WEB 旨在提供一个更大的开箱即用功能集,并减少新应用的开发时间。

从历史的角度来看,我们的故事始于 2007 年,当时 web2py 首次发布。web2py 旨在提供一个全方位的网络开发解决方案:一个包含 Python 解释器、框架、基于互联网的集成开发环境和一系列经过实战检验的良好协作的软件包的压缩文件。在许多方面,web2py 取得了巨大的成功。web2py 成功地为新开发者提供了一个低门槛的入门机会,一个非常安全的开发平台,并且至今仍保持向后兼容。

Web2py 一直面临一个问题:它的单体设计。经验最丰富的 Python 开发者不知道如何在框架之外使用其组件,以及如何在框架内使用第三方组件。我们认为 web2py 是一个完美的工具,不需要拆分成多个部分,因为这样会危及其安全性。结果事实证明我们错了,与他人良好合作是很重要的。因此,自 2015 年以来,我们在三个方面进行了工作:

  • 我们将 web2py 移植到了 Python 3

  • 我们将 web2py 拆分为可以独立使用的模块。

  • 我们将其中一些模块重新组装成一个新的更模块化的框架 —— PY4WEB。

PY4WEB 不仅仅是重新打包。它是一个完整的重新设计。它使用了一些 web2py 模块,但不是全部。在某些情况下,它使用了其他更好的模块。一些功能被移除,另一些功能被添加。我们尽量保留大部分经验丰富的 web2py 用户所喜爱的语法和特性。

以下是一个更明确的列表(如果你使用过 web2py,请参考 “ 从 web2py 迁移到 py4web ” 以获取更多):

  • 与 web2py 不同,PY4WEB 需要 Python 3

  • PY4WEB,与 web2py 不同,PY4WEB可以使用 pip 安装,其依赖关系使用 requirements.txt 管理。

  • PY4WEB,是常规的 Python 模块。这与 web2py 非常不同。特别是,我们抛弃了自定义导入器,现在完全依赖常规的 Python 导入机制。

  • PY4WEB,与 web2py 一样,可以同时为多个应用程序提供服务,只要这些应用程序是应用程序模块的子模块。

  • PY4WEB,与 web2py 不同,PY4WEB 基于 ombott(Bottle 的一个简化和更快的衍生产品),特别是使用了与 Bottle 兼容的请求对象和路由机制。

  • PY4WEB,与 web2py 不同,PY4WEB 不会在每次请求时创建新环境。它引入了 fixture 的概念,以明确声明在新的 http 请求到达时需要(重新)初始化哪些对象,或者在完成时需要清理哪些对象。这使得它比 web2py 快得多。

  • PY4WEB,与 web2py 一样,它有一个新的会话对象,为会话数据提供了强大的安全性和加密,但会话不再存储在文件系统中,那会造成性能问题。它在 Cookie、redis、memcache 或可选的数据库中提供会话。我们还将会话数据限制为 json 可序列化的对象。

  • PY4WEB,和 web2py 一样,有一个内置的工单(Tickets)系统,但与 web2py 不同,这个系统是全局性的,而不是针对每个应用程序的。Tickets 不再与单个应用程序一起存储在文件系统中。它们存储在单个数据库中。

  • PY4WEB,PY4WEB 与 web2py 一样,基于 pydal,但利用了 pydal 的一些新功能(RESTAPI)

  • PY4WEB,PY4WEB 与 web2py 一样,使用 yatl 模板语言,但默认使用方括号 [[ ]]做为分隔符,以避免与 Vue.JS 和 angular.JS 等模型 JS 框架冲突。Yatl 包含 web2py 助手的一个子集。

  • PY4WEB,与 web2py 不同,PY4WEB 使用多元化库进行国际化。在实践中,这暴露了一个与 web2py 的 T 非常相似的对象 T ,但它提供了更好的缓存和更灵活的多元化功能。

  • PY4WEB 附带了一个后台管理应用程序(Dashboard APP),可以取代 web2py 的管理后台。这是一个用于上传/管理/编辑应用程序的 web IDE。

  • PY4WEB 的后台管理应用程序包括一个基于数据库接口的 web 界面。这取代了 web2py 的应用管理功能(appadmin)。

  • PY4WEB 自带的 Form 和 Grid 对象类似于 web2py 的 SQLFORM 和SQLFORM.Grid。

  • PY4WEB 自带了一个 Auth 对象,用于替换 web2py 的 Auth 对象。它更模块化,更容易扩展。它提供了注册、登录、注销、更改密码、请求更改密码、编辑配置文件等开箱即用的基本功能,以及与 PAM、SAML2、LDAP、OAUTH2(谷歌、脸书和推特)的集成。

  • PY4WEB 利用 PyDAL 的新标签功能,将用户标记为组,按组搜索用户,并根据成员资格应用权限。

  • PY4WEB 附带了一些定制的 Vue.js 组件,旨在与 PyDAL RESTAPI 以及 PY4WEB 进行交互。这些 API 旨在允许服务器设置允许客户端执行哪些操作的策略,但在这些约束范围内为客户端提供灵活性。两个主要组件是 mtable(它为数据库提供了一个类似于 web2py 网格的基于 web 的接口)和 auth(auth API的可自定义接口)。

PY4WEB 的目标与 web2py 相同:使 web 开发变得简单易用,同时生成快速安全的应用程序。

致谢

非常感谢所有为项目做出贡献的人,特别是:

特别感谢 Sam de Alfaro,他设计了 py4web 的官方徽标。我们友好地称这个徽标为 "Axel the axolotl",它神奇地代表了善良和包容的意义。我们相信这就是我们不断壮大的社区的基石。

_images/logo.png