PyWebIO - 使用交互式 Python 構建 Web 應用
想要構建一個 Web 應用,提供表格和圖表的展示,以及輸入框輸入等功能,掌握 HTML、CSS 和 Javascript 幾乎是必須的。然而,對於一些入門的開發者,以及衆多的數據科學研究者而言,Web 前端開發技術有一定的門檻。同時,對於這部分開發者而言,往往 Python 語言是他們最爲熟悉的技術。
那麼,能不能僅僅使用 Python,就能方便地構建美觀好用的 Web 網頁應用呢?PyWebIO 使這成爲可能。
簡介
PyWebIO,是 wang0618 在 Github 上開源的交互式 Python Web 應用構建平臺,目前版本爲 v1.2.3。
PyWebIO 提供了一系列命令式的交互函數來在瀏覽器上獲取用戶輸入和進行輸出,將瀏覽器變成了一個 “富文本終端”,可以用於構建簡單的 Web 應用或基於瀏覽器的 GUI 應用。PyWebIO 還可以方便地整合進現有的 Web 服務,讓你不需要編寫 HTML 和 JS 代碼,就可以構建出具有良好可用性的應用。
PyWebIO
使用
PyWebIO 功能強大,且
-
使用同步而不是基於回調的方式獲取輸入,代碼編寫邏輯更自然
-
非聲明式佈局,佈局方式簡單高效
-
代碼侵入性小,舊腳本代碼僅需修改輸入輸出邏輯便可改造爲 Web 服務
-
支持整合到現有的 Web 服務,目前支持與 Flask、Django、Tornado、aiohttp、FastAPI 框架集成
-
同時支持基於線程的執行模型和基於協程的執行模型
-
支持結合第三方庫實現數據可視化
使用 PyWebIO,我們可以很簡單地構建較爲複雜的網頁應用。
從上圖可以看到,通過實時輸入 Python 命令,我們得到了一個展示數據表格、圖片、公式、按鈕的網頁應用。
我們還可以構建能夠進行數據輸入的網頁,,同樣通過 Python 命令,實時構建一個表單:
PyWebIO 要求 Python 3.5.2+,使用 PyPI 安裝:
pip3 install -U pywebio
我們來看一個簡單的例子,實現一個簡單的計算 BMI 指數的腳本:
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__':
bmi()
可以看到,這個腳本的核心只是簡單地對輸入的體重和身高進行 BMI 指數的計算,然後按範圍判斷胖瘦程度,最終輸出結果。
如果使用標準命令行的輸入輸出,這就只是一個命令行腳本程序而已。而當使用了 pywebio 提供的輸入輸出函數後,運行程序,就能夠自動生成一個網頁應用,擁有兩個輸入框,分別輸入身高和體重,最終計算展示 BMI 指數結果。
你可以按照編寫控制檯程序的邏輯編寫 PyWebIO 應用,只不過這裏的終端變成了瀏覽器。通過 PyWebIO 提供的命令式 API, 你可以簡單地調用 put_text 、 put_image 、 put_table 等函數輸出文本、圖片、表格等內容到瀏覽器,也可以調用 input 、 select 、 file_upload 等函數在瀏覽器上顯示不同表單來接收用戶的輸入。此外 PyWebIO 中還提供了點擊事件、佈局等支持,讓你可以使用最少的代碼完成與用戶的交互, 並儘可能提供良好的用戶體驗。
在 PyWebIO 中,有兩種方式用來運行 PyWebIO 應用:作爲腳本運行和使用 start_server() 或 path_deploy() 來作爲 Web 服務運行:
-
在 Server 模式下,PyWebIO 會啓動一個 Web 服務來持續性地提供服務。當用戶訪問服務地址時,PyWebIO 會開啓一個新會話並運行 PyWebIO 應用。
-
Script 模式下,在任何位置都可以調用 PyWebIO 的交互函數。如果用戶在會話結束之前關閉了瀏覽器,那麼之後會話內對於 PyWebIO 交互函數的調用將會引發一個 SessionException 異常。
可以將 PyWebIO 應用集成到現有的 Python Web 項目中,PyWebIO 應用與 Web 項目共用一個 Web 框架。目前支持與 Flask、Tornado、Django 和 aiohttp Web 框架的集成。
PyWebIO 提供了豐富的第三方生態,其中比較重要的就是數據可視化。對於數據科學研究者而言,可以不必學習 Web 前端技術,也不必安裝各種複雜的環境,就能實現一個可以向其他人展示數據結果的 Web 應用,這是十分便利的。PyWebIO 提供了包括 Bokeh、plotly、cutecharts.py、Pyecharts 等 1 可視化庫的集成,能夠十分方便地完成數據的可視化。
PyWebIO
總結
PyWebIO 提供了一系列命令式的交互函數,來在瀏覽器上獲取用戶輸入和進行輸出,可以構建 Web 應用或基於瀏覽器的 GUI 應用,而無需學習前端相關技術。PyWebIO 還提供了 Web 服務框架集成,和第三方可視化庫的集成,使得數據的展示變得更爲簡單易實現。
來源:
https://www.toutiao.com/i6947584489849717259/
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/M_xs-cth7KKziS4y-H6j6A