MCPcopy Index your code
hub / github.com/pywebio/PyWebIO

github.com/pywebio/PyWebIO @v1.8.4 sqlite

repository ↗ · DeepWiki ↗ · release v1.8.4 ↗
2,153 symbols 7,826 edges 120 files 292 documented · 14% 1 cross-repo links
README

PyWebIO

<em>Write interactive web app in script way.</em>






<a href="https://percy.io/pywebio/pywebio">
    <img src="https://percy.io/static/images/percy-badge.svg" alt="Percy visual test">
</a>
<a href="https://codecov.io/gh/pywebio/PyWebIO">
    <img src="https://codecov.io/gh/pywebio/PyWebIO/branch/dev/graph/badge.svg?token=YWH3WC828H" alt="Code coverage"/>
</a>
<a href="https://www.jsdelivr.com/package/gh/wang0618/PyWebIO-assets">
    <img src="https://data.jsdelivr.com/v1/package/gh/wang0618/PyWebIO-assets/badge?style=rounded" alt="Jsdelivr hit count"/>
</a>
<a href="https://pywebio.readthedocs.io/zh_CN/latest/?badge=latest">
    <img src="https://readthedocs.org/projects/pywebio/badge/?version=latest" alt="Documentation Status">
</a>
<a href="https://pypi.org/project/PyWebIO/">
    <img src="https://img.shields.io/pypi/v/pywebio?colorB=brightgreen" alt="Package version">
</a>
<a href="https://pypi.org/project/PyWebIO/">
    <img src="https://img.shields.io/badge/python->%3D%203.5.2-brightgreen" alt="Python Version">
</a>



<a href="https://github.com/wang0618/PyWebIO/blob/master/LICENSE">
    <img src="https://img.shields.io/github/license/wang0618/PyWebIO.svg" alt="License">
</a>



<a href="https://pywebio.readthedocs.io/zh_CN/latest/">[Document]</a> | <a href="http://pywebio-demos.pywebio.online/">[Demos]</a> | <a href="https://play.pywebio.online">[Playground]</a> | <a href="https://github.com/wang0618/PyWebIO/wiki/%5B%E4%B8%AD%E6%96%87%5D-Why-PyWebIO%3F">[Why PyWebIO?]</a>

English | 中文

PyWebIO提供了一系列命令式的交互函数来在浏览器上获取用户输入和进行输出,将浏览器变成了一个“富文本终端”,可以用于构建简单的Web应用或基于浏览器的GUI应用。 PyWebIO还可以方便地整合进现有的Web服务,让你不需要编写HTML和JS代码,就可以构建出具有良好可用性的应用。

<img src="https://raw.githubusercontent.com/wang0618/PyWebIO/dev/docs/assets/output_demo.gif" alt="PyWebIO output demo" width='609px'/>
<img src="https://raw.githubusercontent.com/wang0618/PyWebIO/dev/docs/assets/input_demo.gif" alt="PyWebIO input demo" width='609px'/>

功能特性:

  • 使用同步而不是基于回调的方式获取输入,代码编写逻辑更自然
  • 非声明式布局,布局方式简单高效
  • 代码侵入性小,旧脚本代码仅需修改输入输出逻辑便可改造为Web服务
  • 支持整合到现有的Web服务,目前支持与Flask、Django、Tornado、aiohttp、FastAPI框架集成
  • 同时支持基于线程的执行模型和基于协程的执行模型
  • 支持结合第三方库实现数据可视化

Installation

稳定版安装:

pip3 install -U pywebio

开发版安装:

pip3 install -U https://github.com/pywebio/PyWebIO/archive/dev-release.zip

系统要求: PyWebIO要求 Python 版本在 3.5.2 及以上

Quickstart

Hello, world

这是一个使用PyWebIO计算 BMI指数 的脚本:

from pywebio.input import input, FLOAT
from pywebio.output import put_text

def bmi():
    height = input("请输入你的身高(cm):", type=FLOAT)
    weight = input("请输入你的体重(kg):", type=FLOAT)

    BMI = weight / (height / 100) ** 2

    top_status = [(14.9, '极瘦'), (18.4, '偏瘦'),
                  (22.9, '正常'), (27.5, '过重'),
                  (40.0, '肥胖'), (float('inf'), '非常肥胖')]

    for top, status in top_status:
        if BMI <= top:
            put_text('你的 BMI 值: %.1f,身体状态:%s' % (BMI, status))
            break

if __name__ == '__main__':
    bmi()

如果没有使用PyWebIO,这只是一个非常简单的脚本,而通过使用PyWebIO提供的输入输出函数,你可以在浏览器中与代码进行交互 [demo]

<a href="http://pywebio-demos.pywebio.online/?pywebio_api=bmi">
    <img src="https://raw.githubusercontent.com/wang0618/PyWebIO/dev/docs/assets/demo_zh.gif" alt="PyWebIO demo" width="400px"/>
</a>

作为Web服务提供

上文BMI程序会在计算完毕后立刻退出,可以使用 pywebio.start_server()bmi() 函数作为Web服务提供:

from pywebio import start_server
from pywebio.input import input, FLOAT
from pywebio.output import put_text

def bmi():  # bmi() 函数内容不变
    ...  

if __name__ == '__main__':
    start_server(bmi, port=80)

与现有Web框架整合

Tornado应用整合:仅需在现有的Tornado应用中添加一个 RequestHandler ,就可以将PyWebIO应用整合进Tornado Web服务中

import tornado.ioloop
import tornado.web
from pywebio.platform.tornado import webio_handler

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

if __name__ == "__main__":
    application = tornado.web.Application([
        (r"/", MainHandler),
        (r"/bmi", webio_handler(bmi)),  # bmi 即为上文计算BMI指数的函数
    ])
    application.listen(port=80, address='localhost')
    tornado.ioloop.IOLoop.current().start()

http://localhost/bmi 页面上就可以计算BMI了。

与其他Web框架整合请见文档

Demos

  • 基本demo : 包含PyWebIO基本输入输出演示和使用PyWebIO编写的小应用
  • 数据可视化demo : 使用 bokeh、plotly、pyecharts 等库进行数据可视化

Links

Extension points exported contracts — how you extend this code

CommandHandler (Interface)
(no doc) [18 implementers]
webiojs/src/handlers/base.ts
Session (Interface)
(no doc) [4 implementers]
webiojs/src/session.ts
Widget (Interface)
(no doc) [1 implementers]
webiojs/src/models/output.ts
Dict (Interface)
(no doc)
webiojs/src/utils.ts
Command (Interface)
(no doc)
webiojs/src/session.ts

Core symbols most depended-on inside this repo

push
called by 1409
webiojs/src/utils.ts
get
called by 209
pywebio/platform/tornado.py
append
called by 148
pywebio/output.py
put_markdown
called by 135
pywebio/output.py
remove
called by 134
webiojs/src/utils.ts
put_text
called by 87
pywebio/output.py
get
called by 46
pywebio/utils.py
put_buttons
called by 40
pywebio/output.py

Shape

Function 1,646
Method 385
Class 97
Route 18
Interface 7

Languages

TypeScript68%
Python32%

Modules by API surface

pywebio/html/js/ag-grid-enterprise.min.js488 symbols
pywebio/html/js/codemirror.min.js361 symbols
pywebio/output.py87 symbols
pywebio/html/js/jquery.min.js83 symbols
pywebio/html/js/ag-grid-community.min.js76 symbols
pywebio/html/js/popper.min.js53 symbols
pywebio/utils.py45 symbols
webiojs/src/session.ts42 symbols
pywebio/session/coroutinebased.py35 symbols
pywebio/platform/tornado.py33 symbols
pywebio/html/js/require.min.js31 symbols
webiojs/src/utils.ts30 symbols

Used by 1 indexed graphs manifest dependencies, hub-wide

Dependencies from manifests, versioned

@types/jquery3.3.38 · 1×
@types/marked1.2.2 · 1×
babel-core6.26.3 · 1×
babel-preset-es20156.24.1 · 1×
babelify8.0.0 · 1×
browserify16.5.1 · 1×
fancy-log1.3.3 · 1×
gulp4.0.0 · 1×
gulp-sourcemaps2.6.5 · 1×
gulp-typescript6.0.0-alpha.1 · 1×
gulp-uglify3.0.2 · 1×
gulp-uglify-es2.0.0 · 1×

For agents

$ claude mcp add PyWebIO \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact