今天我分享一个工具,它可以让开发交互式Web应用变得超级简单。没有HTML、CSS、JAVASCRIPT都可以。交互式网页应用非常实用,比如制作调查页面、投票系统、信息收集表、上传文件等。由于网页是可视化的,所以也可以在没有服务器的情况下作为图片界面应用。如果你有这样的开发需求,用Python真的很简单。借助PyWebIO(pipinstallpywebio),分分钟实现网页的信息录入。你可以看到下面的动画:[]()上面的页面只使用了这6行代码:frompywebio.inputimport*input("Thisisasimpletextinput")select("Thisisadropdownmenu",['Option1','Option2'])checkbox("多选!",options=["a",'b','c','d'])radio("任选其一",options=['1','2','3'])textarea('文本区',rows=3,placeholder='多行文本输入')让网页输出想要的信息也很简单。代码如下。function函数已经注释了,可以很容易理解:frompywebio.outputimport*frompywebioimportsession#网页上显示纯文本put_text("Hellofriend!")#网页上显示tableput_table([['Object','Unit'],['A','55'],['B','73'],])#在网页上显示MarkDownput_markdown('~~PyWebIO~~')#显示下载文件在网页上的链接put_file('output_file.txt',b'Youcanputanythinghere')#在网页上显示图片put_image(open('python_logo.png','rb').read())#弹窗popup('弹窗标题','弹窗文本内容')#保持session打开,否则显示页面程序退出运行session.hold()效果如下:上面[](),几行代码就实现了一个有输入有输出的web应用,是不是很神奇?构建基于浏览器的GUI程序PyWebIO提供了一系列命令式交互函数来获取用户在浏览器上的输入和输出,将浏览器变成“富文本”终端”,可用于构建简单的Web应用程序或基于浏览器的GUI应用程序例如计算BMI指数的脚本:frompywebioimportstart_serverfrompywebio.inputimportinput,FLOATfrompywebio.outputimportput_textdefbmi():height=input("请输入你的身高(cm):",type=FLOAT)weight=input("请输入您的体重(kg):",type=FLOAT)BMI=weight/(height/100)**2top_status=[(14.9,'很瘦'),(18.4,'很瘦thin'),(22.9,'normal'),(27.5,'overweight'),(40.0,'obese'),(float('inf'),'veryobese')]top,statusintop_status:ifBMI<=top:put_text('你的BMI值:%.1f,身体状况:%s'%(BMI,status))breakif__name__=='__main__':start_server(bmi,port=80)Effect:[]()more多个例子:basicdemo聊天室:与当前所有在线人聊天(不到90行代码实现)Markdown实时预览:在线Markdown编辑器实时预览(不到40行代码实现)在线五子棋游戏:多人协作五子棋游戏(不到100里实现nesofcode)输入demo:演示PyWebIO输入模块的用法输出demo:演示PyWebIO输出模块的用法数据可视化demoPyWebIO也支持第三方库进行数据可视化使用bokeh进行数据可视化使用plotly进行plotly数据可视化使用pyecharts制作Echarts-basedcharts使用pyg2plot创建基于G2Plot的图表使用cutecharts.py创建卡通风格图表数据可视化效果:[]()与现有框架PyWebIO也集成它可以轻松集成到现有的Web服务中,让您无需编写HTML和JS代码即可构建具有良好可用性的应用程序。它目前支持与Flask、Django、Tornado、aiohttp和FastAPI框架的集成。例如,要与Tornado应用程序集成:importtornado.ioloopimporttornado.webfrompywebio.platform.tornadoimportwebio_handlerclassMainHandler(tornado.web.RequestHandler):defget(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()与Django集成:#urls.pyfromdjango.urlsimportpathfrompywebio.platform.djangoimportwebio_view#`task_func`PyWebIOtaskfunctionwebio_view_func=webio_view(task_func)urlpatterns=[path(r"tool",webio_view_func),]最后,PyWebIO使用同步而非基于回调的方式获取输入,代码编写逻辑更自然,非声明式布局,布局简洁高效,代码侵入性小,只需修改输入输出逻辑即可将旧的脚本代码转化为Web服务,也可以集成到现有的主流Web框架中。同时支持基于线程的执行模型和基于协程的执行模型,支持结合第三方库进行数据可视化。总之,PyWebIO让交互式Web开发变得更加简单,特别适合开发简单的GUI程序和数据可视化。
