欢迎访问我的网站,希望内容对您有用,感兴趣的可以加入我们的社群。

一个纯Python构建的Web应用框架

实用模块 迷途小书童 1年前 (2023-09-18) 1116次浏览 0个评论

简介

虽然现在有很多 Python web 应用框架,但大多数都是为小型数据应用程序设计的,或者使用了未经大规模验证的范式。随着应用程序复杂性的增加,代码组织、可重用性和状态往往会受到影响,结果要么是代码混乱,要么就直接使用 React 来开发应用程序了。

Solara 解决了这一问题。使用类似 React 的应用程序接口,我们无需担心可扩展性。React 已经证明了它有能力支持世界上最大的网络应用程序。Solara 使用 React 的纯 Python 实现(Reacton),创建基于 ipywidget 的应用程序。这些应用程序既可以在 Jupyter Notebook 中运行,也可以通过 FastAPI 等框架作为独立的网络应用程序运行。这种范式实现了基于组件的代码和极其简单的状态管理。

通过在 ipywidgets 基础上进行构建,我们可以自动利用现有的 widgets 生态系统,并在许多平台上运行,包括 JupyterLabJupyter NotebookVoilàGoogle ColabDataBricksJetBrains Datalore 等。

安装

使用 pip 命令安装

pip install solara

基础语法

创建响应式变量

使用 solara.reactive() 可以创建响应式变量,它可以绑定到 UI 组件上实现数据的响应式更新

count = solara.reactive(0)

定义组件

使用 @solara.component 装饰器可以定义组件

@solara.component
def MyComponent():
    # 组件的实现

组件可以显示响应式变量,也可以包含其他 solara 组件

引用组件

直接调用组件函数即可渲染组件

MyComponent()

更新响应式变量

如果响应式变量更新,那么其绑定的组件也会自动更新

count.value += 1

solara 通过响应式变量连接数据和组件,使用简单的 Python 语法可以构建动态页面

示例代码

下面是官方的一个完整代码示例

import solara

sentence = solara.reactive("Solara makes our team more productive.")
word_limit = solara.reactive(10)

@solara.component
def Page():
    word_count = len(sentence.value.split())

    solara.SliderInt("Word limit", value=word_limit, min=2, max=20)
    solara.InputText(label="Your sentence", value=sentence, continuous_update=True)

    if word_count >= int(word_limit.value):
        solara.Error(f"With {word_count} words, you passed the word limit of {word_limit.value}.")
    elif word_count >= int(0.8 * word_limit.value):
        solara.Warning(f"With {word_count} words, you are close to the word limit of {word_limit.value}.")
    else:
        solara.Success("Great short writing!")

Page()

执行上述代码,命令是

solara run sol.py

会启动一个 web 服务,随即自动使用默认浏览器打开 http://localhost:8765

python solara

这段代码使用了 solara 库实现了一个简单页面:

导入 solara 库,创建一个响应式的句子变量 sentence 和单词限制变量 word_limit。然后,使用 solara.component 装饰器定义一个 Page 组件。在组件内部,统计 sentence 中的单词数量 word_count。使用 solara.SliderInt 创建一个滑块组件,绑定到 word_limit 变量。使用 solara.InputText 创建一个文本输入组件,绑定到 sentence 变量。根据 word_countword_limit 的关系,显示不同的打印信息,如果超过限制,显示 Error 提示;如果接近限制,显示 Warning 提示,否则显示 Success 消息。最后调用 Page 组件进行渲染。这样我们就可以通过拖动滑块实时修改限制,并输入句子查看字数提示的变化。

参考资料

喜欢 (0)

您必须 登录 才能发表评论!