PyWebIO——免 HTML、JS 快速构建简单 Web 应用的 Python 库

2021-01-19 16:27:11 +08:00
 NeilWang

和大家分享一下我过去一年投入主要精力写的一个 Python 库——PyWebIO 。

简单说下背景,我之前开发过一个小程序,后台经常有些管理性的操作(比如发布通知、回复反馈等),最开始是通过 ssh 运行脚本来操作,但感觉不太方便,想做成 Web 页面但又觉得写前后端接口很麻烦。

于是就很希望有一个库,只需要调用一个函数,就可以在浏览器上显示表单,用户提交后函数同步返回表单数据;然后再提供一些函数,可以实时输出各种形式的数据,比如表格、图片、Markdown 等。

这样相当于把浏览器当成了一个富文本终端,编写 Web 服务就像编写控制台程序一样只需要调用输入输出函数就可以完成交互。找来找去,也没找到满意的工具可以实现这种需求,感觉此需求是普遍存在的,就自己开坑写了一个,于是就有了 PyWebIO 。

到现在,除了支持最初设想的输入、输出函数外,PyWebIO 还支持布局、事件绑定、并发、协程、与现有的 Web 应用集成等特性,文档也十分的完善。

总结来说,PyWebIO 能够让你用编写终端程序的逻辑来编写 Web 应用,不需要编写前端页面和后端接口,非常适合在短时间内快速构建对 UI 要求不高的应用(比如自用的 Web 后台、在线小工具等)。PyWebIO 既适合从来没有接触过 Web 开发的程序员来像编写终端程序一样编写 Web 应用,又适合有 Web 开发经验的程序员在自己的 Web 应用中快速实现某些小功能。

关于 PyWebIO 对传统 Web 的优势可以进一步阅读这篇文章:Why PyWebIO

GitHub 和文档放在下面了,欢迎大家体验和提出宝贵意见🙏。

Github: https://github.com/wang0618/PyWebIO
文档: https://pywebio.readthedocs.io/ (文档里的绝大部分代码示例都有在线演示的链接)

下面是一些使用 PyWebIO 编写的 Demo 和应用:

最后贴两个 PyWebIO 输入和输出函数调用效果的动图

14667 次点击
所在节点    分享创造
139 条回复
luooo
2021-01-19 17:47:13 +08:00
想尝试做一个推流的应用,楼主方便联系我吗。◕‿◕。
Plague
2021-01-19 17:49:29 +08:00
pip 安装问题

PS C:\Users\George> pip install pywebio
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting pywebio
Downloading https://pypi.tuna.tsinghua.edu.cn/packages/6f/67/e56cf94bf53113b7e1f745c9a690014f9ee05c00ca204c310fa79b810e04/pywebio-1.0.0.tar.gz (3.8MB)
|████████████████████████████████| 3.8MB 88kB/s
ERROR: Command errored out with exit status 1:
command: 'c:\users\george\appdata\local\programs\python\python38-32\python.exe' -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\George\\AppData\\Local\\Temp\\pip-install-ucisft40\\pywebio\\setup.py'"'"'; __file__='"'"'C:\\Users\\George\\AppData\\Local\\Temp\\pip-install-ucisft40\\pywebio\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base pip-egg-info
cwd: C:\Users\George\AppData\Local\Temp\pip-install-ucisft40\pywebio\
Complete output (5 lines):
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Users\George\AppData\Local\Temp\pip-install-ucisft40\pywebio\setup.py", line 13, in <module>
readme = f.read()
UnicodeDecodeError: 'gbk' codec can't decode byte 0xa7 in position 1798: illegal multibyte sequence
----------------------------------------
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
WARNING: You are using pip version 19.2.3, however version 20.3.3 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.
NeilWang
2021-01-19 17:49:46 +08:00
@luooo 对布局只是做了简单的支持,可以参考 https://pywebio.readthedocs.io/zh_CN/latest/guide.html#id12 。另外还可以使用 https://pywebio.readthedocs.io/zh_CN/latest/output.html#pywebio.output.put_widget 这个函数来输出自定义的 html 结构,然后配合 style 标签实现布局。不过 PyWebIO 的初衷还是快速开发一些对布局不太依赖的 Web 应用,需要复杂布局和事件支持的话,还是考虑传统 Web
ck65
2021-01-19 17:49:59 +08:00
很有意思,比 DHH 的 Hotwire 还刺激!
NeilWang
2021-01-19 17:53:22 +08:00
@Plague 编码问题,我这就修复一下
Cyron
2021-01-19 17:59:18 +08:00
牛逼,赞助你 500 万!
roudancongji
2021-01-19 18:06:45 +08:00
意义党,无用党,风凉话党 还有 30 秒到达战场,顺便,楼主牛逼!!!
lanyusea
2021-01-19 18:08:29 +08:00
专门登录账号回复一下:太酷啦!
Geekgogo
2021-01-19 18:17:43 +08:00
太顶了,star
qq7790586
2021-01-19 18:18:04 +08:00
@Plague #22 升级 py 版本
NeilWang
2021-01-19 18:19:42 +08:00
@NeilWang 新发布的 v1.0.1 已经解决这个问题,不过其他的 PyPi 源应该不能及时同步,可以用这个命令安装开发版 pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple https://code.aliyun.com/wang0618/pywebio/repository/archive.zip
NeilWang
2021-01-19 18:20:56 +08:00
@Plague 刚刚 @ 错了,windows 安装出错参考 31 楼的回复
youthfire
2021-01-19 18:28:23 +08:00
看起来很有意思, 这东西可以用来作为 pandas 的 dataframe 前端数据呈现吗?
shunia
2021-01-19 18:53:10 +08:00
demo 全都挂了啊?连不上 ws
renyijiu
2021-01-19 19:02:32 +08:00
很酷
XiaMuCoder
2021-01-19 19:03:31 +08:00
试了一下,真的好强!!
NeilWang
2021-01-19 19:11:44 +08:00
@shunia 数据可视化 demo 的有个页面的链接有误,现在已经修复了
narmgalaxy
2021-01-19 19:32:43 +08:00
很强!
hfutzj
2021-01-19 19:40:08 +08:00
很有意思,当初学习 python 的初衷就是 i 选哪个尽可能地简单,现在随便写个网站的话,确实比 flask 这些要快很多了,一个文件就够了
xiaoxinshiwo
2021-01-19 19:56:53 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/746349

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX