PyWebIO:像編寫終端腳本一樣來編寫Web應(yīng)用

導(dǎo)言
input()或者scanf(),輸出使用print之類的函數(shù)進行交互。相信每個人對這種方式都非常的熟悉。Web應(yīng)用需要編寫額外的前端代碼來實現(xiàn)界面。 由于Http協(xié)議的無狀態(tài)性,Web應(yīng)用需要在各個后端接口之間轉(zhuǎn)遞狀態(tài)(比如通過session機制或前端的 機制)。Web應(yīng)用在單次HTTP請求中,無法實現(xiàn)實時輸出,所以一些耗時操作通常需要離線完成,而前端需要定時輪詢來實現(xiàn)“偽實時”。
PyWebIO的使用
安裝
pip3?install?-U?pywebio
Hello, world
from?pywebio.input?import?input,?FLOAT
from?pywebio.output?import?put_text
def?bmi(height,?weight):??#?計算BMI
????bmi_value?=?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_value?<=?top:
????????????return?bmi_value,?status
def?main():
????height?=?input("請輸入你的身高(cm):",?type=FLOAT)
????weight?=?input("請輸入你的體重(kg):",?type=FLOAT)
????bmi_value,?status?=?bmi(height,?weight)
????put_text('你的 BMI 值:?%.1f,身體狀態(tài):%s'?%?(bmi_value,?status))
if?__name__?==?'__main__':
????main()

bmi() 的直接調(diào)用改為使用 pywebio.start_server(bmi, port=80) 便可以在80端口提供 bmi() 服務(wù)( 在線Demo )。另外,如果你已經(jīng)有一個正在運行的Web應(yīng)用,PyWebIO同樣支持將編寫的BMI應(yīng)用整合到你的Web應(yīng)用中。基本使用

from?pywebio.input?import?*
#?文本輸入
input("What's?your?name?")
#?下拉選擇
select('Select',?['A',?'B'])
#?多選
checkbox("Checkbox",?options=['Check?me'])
#?單選
radio("Radio",?options=['A',?'B',?'C'])
#?多行文本輸入
textarea('Text',?placeholder='Some?text')
#?文件上傳
file_upload("Select?a?file:")
#?代碼編輯
textarea('Code?Edit',?code={
????'mode':?"python",
????'theme':?'darcula',
},?value='import?...')
#?輸入組
input_group("Basic?info",?[
????input('Name',?name='name'),
????input('Age',?name='age'),
])
#?輸入校驗
def?check(p):
????if?p?!=?2:
????????return?'Wrong!'
input("1+1=?",?type=NUMBER,?validate=check)

from?pywebio.output?import?*
#?輸出文本
put_text("Hello?world!");
#?輸出表格
put_table([
????['Product',?'Price'],
????['Apple',?'$5.5'],
????['Banner',?'$7'],
]);
#?輸出圖像
put_image(open('python-logo.png',?'rb').read());
#?輸出MarkDown
put_markdown('**Bold?text**');
#?輸出通知消息
toast('Awesome?PyWebIO!!');
#?輸出文件
put_file('hello_word.txt',?b'hello?word!');
#?輸出Html
put_html('E?=?mc2');
#?顯示彈窗
with?popup('Popup?title'):
????put_text("Hello?world!")
????put_table([
????????['Product',?'Price'],
????????['Apple',?'$5.5'],
????????['Banner',?'$7'],
????])
#?輸出可以點擊的按鈕
def?on_click(btn):
????put_markdown("You?click?`%s`?button"?%?btn)
put_buttons(['A',?'B',?'C'],?onclick=on_click);
#?使用行布局
put_row([put_code('A'),?None,?put_code('B')]);
#?輸出進度條
import?time
put_processbar('bar1');
for?i?in?range(1,?11):
????set_processbar('bar1',?i?/?10)??#?更新進度條
????time.sleep(0.1)




GitHub與文檔
在線Demo
輸入演示:演示PyWebIO輸入模塊的用法 http://pywebio-demos.wangweimin.site/?pywebio_api=input_usage
輸出演示:演示PyWebIO輸出模塊的用法 http://pywebio-demos.wangweimin.site/?pywebio_api=output_usage
數(shù)據(jù)可視化:在PyWebIO中使用bokeh、plotly、pyecharts等庫進行數(shù)據(jù)可視化 http://pywebio-charts.demo.wangweimin.site/
聊天室:不到80行代碼實現(xiàn)的在線聊天室 http://pywebio-demos.demo.wangweimin.site/?pywebio_api=chat_room
更多閱讀
特別推薦

點擊下方閱讀原文加入社區(qū)會員
評論
圖片
表情
