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 输入和输出函数调用效果的动图

14700 次点击
所在节点    分享创造
139 条回复
JustSong
2021-01-19 20:23:18 +08:00
我提了一个 issue,突然发现作者自己没有 watch 自己的仓库
Death
2021-01-19 20:51:59 +08:00
建议也可以去 hackernews 分享一下,发一个 Show HN
NeilWang
2021-01-19 20:58:03 +08:00
@Death 等把文档翻译成英文之后再去发😂
ShuoHui
2021-01-19 21:28:09 +08:00
插言………
echo314
2021-01-19 21:55:09 +08:00
alinwu05
2021-01-19 22:23:17 +08:00
6666
这个好!
ctt
2021-01-19 22:31:11 +08:00
很不错,适合快速上手的小项目
ctt
2021-01-19 22:32:54 +08:00
很不错,让非专业人士能更方便地使用 python
laike9m
2021-01-20 02:37:17 +08:00
看看
fx0719
2021-01-20 06:55:44 +08:00
厉害了
zh584728
2021-01-20 07:56:34 +08:00
nb,已 star
Plague
2021-01-20 09:09:19 +08:00
@NeilWang 好的谢谢
winglight2016
2021-01-20 10:19:10 +08:00
怎么感觉像是 python 版的 jsp ?

我本来以为是可以直接 CRUD 了,但是所有交互还是要手工写代码,那这个库是不是主要目标就是做 MVVM 的映射 /数据绑定功能?
shunia
2021-01-20 10:19:24 +08:00
没懂,我还是打不开 demo 啊,大家都能打开?
比如这个: http://pywebio-demos.demo.wangweimin.site/?pywebio_api=bmi
打开之后 GET http://pywebio-demos.demo.wangweimin.site/bmi?test=1 返回 400 啊
welkinzh
2021-01-20 10:20:18 +08:00
看着挺有意思的,祝越做越好
yuhangch
2021-01-20 10:20:34 +08:00
@ctt 应该是,让不熟悉前端的人士更方便的做个网页,哈哈
chippai
2021-01-20 10:33:41 +08:00
点赞、支持、star 三连
275761919
2021-01-20 10:41:40 +08:00
先 star 为敬,太强了
NeilWang
2021-01-20 10:43:00 +08:00
@shunia 这个 demo 是没问题的,可以尝试换个网络或者浏览器试试。至于返回 400 的接口,那是在探测后端是使用的 WebSocket 协议还是 HTTP 协议,如果使用了 HTTP 协议,会返回 200 的。
shunia
2021-01-20 10:45:46 +08:00
@NeilWang #59 居然是不支持 firefox

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

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

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

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

© 2021 V2EX