热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发交互式Web应用,从未如此简单

今天分享一个让开发交互式Webapp超级简单的工具。不会HTML,CSS,JAVASCRIPT也没事。交互式Webapp非常实用,比如说做

今天分享一个让开发交互式 Web app 超级简单的工具。不会 HTML,CSS,Javascript 也没事。

交互式 Web app 非常实用,比如说做一个问卷调查页面、一个投票系统、一个信息收集表单,上传文件等等,因为网页是可视化的,因此还可以作为一个没有服务端的图片界面应用程序而使用。

如果你有这样的开发需求,那用 Python 真的是太简单了。

借助于 PyWebIO(pip install pywebio),你可以分分钟实现网页的信息录入,可以看下面的动图:

a456bccccbcd79ddf78d635f26826906.gif

上面的页面,也就仅仅用了这 6 行代码:

from pywebio.input import *input("This is a simple text input")
select("This is a drop down menu", ['Option1', 'Option2'])
checkbox("Multiple Choices!", options=["a",'b','c','d'])
radio("Select any one", options=['1', '2', '3'])
textarea('Text Area', rows=3, placeholder='Multiple line text input')

要让网页输出想要的信息也是非常简单,代码如下,函数功能已经做了相关注释,你很容易看懂:

from pywebio.output import *
from pywebio import session# 网页上显示纯文本
put_text("Hello friend!")# 网页上显示表格
put_table([['Object', 'Unit'],['A', '55'],['B', '73'],
])# 网页上显示 MarkDown
put_markdown('~~PyWebIO~~')# 网页上显示下载文件的链接
put_file('output_file.txt', b'You can put anything here')# 网页上显示图片
put_image(open('python_logo.png', 'rb').read())# 网页上显示弹窗
popup('popup title', 'popup text content')# 保持回话是打开状态,否则页面显示完毕程序退出
session.hold()

运行的效果如下:

a5e8ae80d76d97046fe15d6acea883d9.gif

以上,几行代码就实现了一个带有输入输出的 Web 应用,是不是很神奇?

构建基于浏览器的 GUI 程序

PyWebIO 提供了一系列命令式的交互函数来在浏览器上获取用户输入和进行输出,将浏览器变成了一个“富文本终端”,可以用于构建简单的 Web 应用或基于浏览器的 GUI 应用。

比如计算 BMI 指数的脚本:

from pywebio import start_server
from pywebio.input import input, FLOAT
from pywebio.output import put_textdef bmi():height &#61; input("请输入你的身高(cm)&#xff1a;", type&#61;FLOAT)weight &#61; input("请输入你的体重(kg)&#xff1a;", type&#61;FLOAT)BMI &#61; weight / (height / 100) ** 2top_status &#61; [(14.9, &#39;极瘦&#39;), (18.4, &#39;偏瘦&#39;),(22.9, &#39;正常&#39;), (27.5, &#39;过重&#39;),(40.0, &#39;肥胖&#39;), (float(&#39;inf&#39;), &#39;非常肥胖&#39;)]for top, status in top_status:if BMI <&#61; top:put_text(&#39;你的 BMI 值: %.1f&#xff0c;身体状态&#xff1a;%s&#39; % (BMI, status))breakif __name__ &#61;&#61; &#39;__main__&#39;:start_server(bmi, port&#61;80)

效果&#xff1a;

5f1ce45d0086b78eb5b2a230d9e585f3.gif

更多示例&#xff1a;

基本 demo

  • 聊天室[1]: 和当前所有在线的人聊天 (不到 90 行代码实现)

  • Markdown 实时预览[2]: 可以实时预览的在线 Markdown 编辑器 (不到 40 行代码实现)

  • 在线五子棋游戏[3]: 多人协作对战的五子棋游戏 (不到 100 行代码实现)

  • 输入演示[4]: 演示 PyWebIO 输入模块的用法

  • 输出演示[5]: 演示 PyWebIO 输出模块的用法

数据可视化 demo

PyWebIO 还支持使用第三方库进行数据可视化

  • 使用 bokeh 进行数据可视化[6]

  • 使用 plotly 进行数据可视化[7]

  • 使用 pyecharts 创建基于 Echarts 的图表[8]

  • 使用 pyg2plot 创建基于 G2Plot 的图表[9]

  • 使用 cutecharts.py 创建卡通风格图表[10]

数据可视化效果图&#xff1a;

2243248022c3d9cee6aa717919ac2679.gif


与现有框架集成

PyWebIO 还可以方便地整合进现有的 Web 服务&#xff0c;让你不需要编写 HTML 和 JS 代码&#xff0c;就可以构建出具有良好可用性的应用。目前支持与 Flask、Django、Tornado、aiohttp、FastAPI 框架集成。

比如说与 Tornado 应用整合&#xff1a;

import tornado.ioloop
import tornado.web
from pywebio.platform.tornado import webio_handlerclass MainHandler(tornado.web.RequestHandler):def get(self):self.write("Hello, world")if __name__ &#61;&#61; "__main__":application &#61; tornado.web.Application([(r"/", MainHandler),(r"/bmi", webio_handler(bmi)),  # bmi 即为上文计算BMI指数的函数])application.listen(port&#61;80, address&#61;&#39;localhost&#39;)tornado.ioloop.IOLoop.current().start()

与 Django 整合&#xff1a;

# urls.pyfrom django.urls import path
from pywebio.platform.django import webio_view# &#96;task_func&#96; is PyWebIO task function
webio_view_func &#61; webio_view(task_func)urlpatterns &#61; [path(r"tool", webio_view_func),
]

与更多框架的整合见文档[11]

最后

PyWebIO 使用同步而不是基于回调的方式获取输入&#xff0c;代码编写逻辑更自然&#xff0c;非声明式布局&#xff0c;布局方式简单高效&#xff0c;代码侵入性小&#xff0c;旧脚本代码仅需修改输入输出逻辑便可改造为 Web 服务&#xff0c;还可以整合到现有的主流 Web 框架。同时支持基于线程的执行模型和基于协程的执行模型&#xff0c;支持结合第三方库实现数据可视化&#xff0c;更多知识请阅读官方文档[12]

一句话&#xff0c;PyWebIO 让交互式的 Web 开发变得更加简单&#xff0c;特别适合开发简单的 GUI 程序及数据可视化。

点击查看更多 Web 开发文章

写到这里&#xff0c;又来求赞&#xff0c;求在看了&#xff0c;如果觉得有用&#xff0c;欢迎分享给需要的朋友。也可以关注我&#xff0c;每天学习一个小技术。

参考资料

[1]

聊天室: https://pywebio-demos.pywebio.online/chat_room

[2]

Markdown 实时预览: https://pywebio-demos.pywebio.online/markdown_previewer

[3]

在线五子棋游戏: https://pywebio-demos.pywebio.online/gomoku_game

[4]

输入演示: https://pywebio-demos.pywebio.online/input_usage

[5]

输出演示: https://pywebio-demos.pywebio.online/output_usage

[6]

使用 bokeh 进行数据可视化: http://pywebio-charts.pywebio.online/?app&#61;bokeh

[7]

使用 plotly 进行数据可视化: http://pywebio-charts.pywebio.online/?app&#61;plotly

[8]

使用 pyecharts 创建基于 Echarts 的图表: http://pywebio-charts.pywebio.online/?app&#61;pyecharts

[9]

使用 pyg2plot 创建基于 G2Plot 的图表: http://pywebio-charts.pywebio.online/?app&#61;pyg2plot

[10]

使用 cutecharts.py 创建卡通风格图表: http://pywebio-charts.pywebio.online/?app&#61;cutecharts

[11]

文档: https://pywebio.readthedocs.io/zh_CN/latest/advanced.html#integration-with-web-framework

[12]

官方文档: https://pywebio.readthedocs.io/zh_CN/latest/


推荐阅读
  • 前端库Bootstrap框架:「11]使用 span 创建行内元素
    前端库Bootstrap框架:「11]使用 span 创建行内元素 ... [详细]
  • 本篇文章为大家展示了input语句的作用有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。HTML标签 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • PG12新增的VACUUM命令的SKIP_LOCKED选项
    PG12版本的VACUUM命令新增了SKIP_LOCKED选项,该选项使得vacuum命令在遇到被lock住的table时可以跳过并被视为成功执行。之前的版本中,vacuum命令会一直处于等待状态。本文还提到了PostgreSQL 12.1版本的相关信息。 ... [详细]
  • 1.Listener是Servlet的监听器,它可以监听客户端的请求、服务端的操作等。通过监听器,可以自动激发一些操作,比如监听在线的用户的数量。当增加一个HttpSession时 ... [详细]
  • 浅析对象 VO、DTO、DO、PO 概念
    作者|CatQi链接|cnblogs.comqixuejiap4390086.html前言由于此订阅号换了个皮肤,导致用户接受文章不及时。读者可以打开订阅号「Web项 ... [详细]
  • 有几百条数据类似*Oct1809:46:09:%NFPP_IP_GUARD-4-DOS_DETECTED:Host<IP60.12.174.45,MACNA,portGi2 ... [详细]
  • 第二次网页前端培训笔记(表单,INPUT及常用字符)
    1.表单form2.INPUT编号: ... [详细]
author-avatar
政哲俊其舒涵
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有