乐趣区

关于python:用-Python-开发简单交互式-Web-应用

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

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

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

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

[]()

下面的页面,也就仅仅用了这 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()

运行的成果如下:

[]()

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

构建基于浏览器的 GUI 程序

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

比方计算 BMI 指数的脚本:

from pywebio import start_server
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__':
    start_server(bmi, port=80)

成果:

[]()

更多示例:

根本 demo

  • 聊天室: 和以后所有在线的人聊天 (不到 90 行代码实现)
  • Markdown 实时预览: 能够实时预览的在线 Markdown 编辑器 (不到 40 行代码实现)
  • 在线五子棋游戏: 多人合作对战的五子棋游戏 (不到 100 行代码实现)
  • 输出演示: 演示 PyWebIO 输出模块的用法
  • 输入演示: 演示 PyWebIO 输出模块的用法

数据可视化 demo

PyWebIO 还反对应用第三方库进行数据可视化

  • 应用 bokeh 进行数据可视化
  • 应用 plotly 进行数据可视化
  • 应用 pyecharts 创立基于 Echarts 的图表
  • 应用 pyg2plot 创立基于 G2Plot 的图表
  • 应用 cutecharts.py 创立卡通格调图表

数据可视化效果图:

[]()

与现有框架集成

PyWebIO 还能够不便地整合进现有的 Web 服务,让你不须要编写 HTML 和 JS 代码,就能够构建出具备良好可用性的利用。目前反对与 Flask、Django、Tornado、aiohttp、FastAPI 框架集成。

比如说与 Tornado 利用整合:

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()

与 Django 整合:

# urls.py

from django.urls import path
from pywebio.platform.django import webio_view

# `task_func` is PyWebIO task function
webio_view_func = webio_view(task_func)

urlpatterns = [path(r"tool", webio_view_func),
]

最初

PyWebIO 应用同步而不是基于回调的形式获取输出,代码编写逻辑更天然,非申明式布局,布局形式简略高效,代码侵入性小,旧脚本代码仅需批改输入输出逻辑便可革新为 Web 服务,还能够整合到现有的支流 Web 框架。同时反对基于线程的执行模型和基于协程的执行模型,反对联合第三方库实现数据可视化

一句话,PyWebIO 让交互式的 Web 开发变得更加简略,特地适宜开发简略的 GUI 程序及数据可视化。

退出移动版