<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 1037字,需瀏覽 3分鐘

           ·

          2021-02-02 08:51

          導(dǎo)言

          最開始學(xué)習(xí)寫代碼的時候,程序都是運行在終端里的,輸入使用input()或者scanf(),輸出使用print之類的函數(shù)進行交互。相信每個人對這種方式都非常的熟悉。
          而到了Web應(yīng)用編程,就會發(fā)現(xiàn),Web應(yīng)用需要我們編寫更多的代碼來實現(xiàn)相同的功能,這體現(xiàn)在:
          1. Web應(yīng)用需要編寫額外的前端代碼來實現(xiàn)界面。
          2. 由于Http協(xié)議的無狀態(tài)性,Web應(yīng)用需要在各個后端接口之間轉(zhuǎn)遞狀態(tài)(比如通過session機制或前端的機制)。
          3. Web應(yīng)用在單次HTTP請求中,無法實現(xiàn)實時輸出,所以一些耗時操作通常需要離線完成,而前端需要定時輪詢來實現(xiàn)“偽實時”。
          對于沒有接觸過Web開發(fā)的同學(xué),聽不懂上面關(guān)于Web的內(nèi)容沒關(guān)系,因為在今天要介紹的這個Python庫中完全不需要理會這些就可以編寫Web應(yīng)用。
          今天要介紹的就是PyWebIO,它允許你像編寫終端腳本一樣來編寫Web應(yīng)用或基于瀏覽器的GUI應(yīng)用,無需具備HTML和JS的相關(guān)知識。PyWebIO提供了一系列命令式的交互函數(shù)來在瀏覽器上獲取用戶輸入和進行輸出,相當(dāng)于將瀏覽器變成了一個“富文本終端”。并且相比于終端程序,PyWebIO又提供了布局、事件綁定等特性,讓應(yīng)用編寫更加方便。

          PyWebIO的使用

          安裝

          pip3?install?-U?pywebio

          Hello, world

          這是一個使用PyWebIO計算 BMI指數(shù) 的應(yīng)用:
          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()
          如果沒有使用PyWebIO,這只是一個非常簡單的腳本,而使用了PyWebIO提供的輸入輸出函數(shù)后,運行腳本,我們就可以在自動打開的瀏覽器中與代碼進行交互:
          現(xiàn)在我們的腳本已經(jīng)可以稱當(dāng)上是基于瀏覽器的GUI應(yīng)用啦。而將上面代碼最后一行對 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)用中。

          基本使用

          PyWebIO支持很多類型的輸入和輸出函數(shù)。輸入函數(shù)為阻塞式調(diào)用,會在用戶瀏覽器上顯示一個表單,在用戶提交表單之前輸入函數(shù)將不會返回;輸出函數(shù)會將內(nèi)容實時輸出至瀏覽器。
          下圖展示了不同輸入函數(shù)的效果:
          圖中調(diào)用的具體代碼為:
          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)
          下圖是PyWebIO的部分輸出函數(shù)的調(diào)用效果:
          圖中調(diào)用的具體代碼為:
          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)
          除了輸入輸出,PyWebIO還支持布局、協(xié)程、數(shù)據(jù)可視化等特性。
          出于篇幅限制,這里就僅展示一下PyWebIO結(jié)合第三方庫進行數(shù)據(jù)可視化的一些炫酷圖表:

          GitHub與文檔

          Github:https://github.com/wang0618/PyWebIO文檔:https://pywebio.readthedocs.io/

          在線Demo

          下面是一些使用PyWebIO編寫的Demo和應(yīng)用:
          • 輸入演示:演示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


          更多閱讀



          2020 年最佳流行 Python 庫 Top 10


          2020 Python中文社區(qū)熱門文章 Top 10


          5分鐘快速掌握 Python 定時任務(wù)框架

          特別推薦




          點擊下方閱讀原文加入社區(qū)會員

          瀏覽 46
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91久久精品日日躁欧美 | 黄色日逼| 黄色福利在线观看 | 日韩欧美影院 | 无码免费一区二区三区 |