跳转到主要内容

最小的Web非框架

项目描述

What the …

Deframed是一个用于Web编程的非框架。实际上,它是Web框架的完全对立面。

什么?

如今,构建网页的基本思路是将尽可能多的任务委托给客户端。问题是,如果你不想这样做,但仍然想向用户提供单页站点,那么你就只能自己动手。

为什么?

好吧,也许JavaScript是一门真正令人讨厌的语言。对你来说可能就是这样。也许你的网站逻辑是秘密配方,不应该最终出现在浏览器中。也许你的API不应该暴露给外界。也许你想要告诉浏览器显示什么。也许你只是想构建一个像任何其他UI一样行为的Web UI,即从用户那里读取事件并告诉屏幕显示什么,就这些。

无论你的原因是什么,DeFramed的目的就是确保你不需要处理浏览器端的编程。至少在绝对必要的情况下不需要。

操作原理

客户端

DeFramed显示一个通用的初始页面并启动一个小的JavaScript处理器,该处理器连接到服务器上的WebSocket。然后它代理一些DOM操作函数,并导出一些调用,这些调用可以被用户界面的元素使用,以向服务器发送事件或数据。

同时,DeFramed 还提供了客户端旋转器的基本支持,这是一种简单的方法,在连接中断时显示警报,使用 Mustache 模板化以避免发送冗余数据,以及访问本地数据的基本权限以存储相当于 Cookie 的数据并在客户端存储模板。哦,是的,还有一些基本的 DOM 操作,比如向某些元素添加一个类。

DeFramed 还自动为每个按钮添加“onclick”处理程序,并为每个表单添加“onsubmit”(假设它们有一个 ID 且没有现有的处理程序),所以您无需手动添加。

请注意,DeFramed 中不存在任何可以解释为客户端逻辑的东西,这也是为什么 DeFramed 是一个无框架的原因。

服务器

如果客户端没有逻辑,服务器需要处理所有这些。因此,DeFramed 包含支持所有这些功能的类。

DeFramed 服务器基于 Quart-Trio,因此它原生支持异步操作。它使用 Trio 而不是 asyncio:干净地关闭复杂的 asyncio 应用程序是一项没有人应该经历的调试练习。您可以忽略异步部分,但在调用数据库时可能不想这么做。

每个客户端的事件都是顺序处理的,尽管很容易运行后台任务——这个任务在客户端断开连接或超时时会被终止。

由以下支持