Python 如何開發高效漂亮的輕量級 Web 應用?
痛點
從我開始折騰資料分析工具的那一天,就沒有想明白一件事兒 —— 我打算把資料分析的成果做成一個 Web 應用,為什麼這麼難?
我需要的核心功能,無非是在網頁上接收使用者輸入,然後做分析處理,把分析結果反饋給使用者,完事兒。
可是這談何容易?
很多人都會微笑著告訴你,想做 Web 應用?這得學前端程式設計, HTML + Javascript 瞭解一下吧!
什麼?你還需要在後臺做資料分析?那你就得學 Web 框架了。
你說喜歡 Python ?那就學個 Django 或者 Flask 好了。
我也不是沒有看過 Django 和 Flask 的教程,還曾經付費學習過。光是 Django 配置環境,就夠寫一章出來。
作為學習的中間成果,我還寫了這篇《如何用 Python 做 Web 開發?——Django 環境配置》分享給你。
真正讓我痛苦的,不是 Web 框架的操作有多麼瑣碎,而是教程裡的案例,為什麼都那麼奇怪?
幾乎所有的教程,都指向一個目標:
來,我教你做一個 blog 出來!
我用你教?!
我要是想用 blog ,可以直接註冊一個免費的啊!為什麼我要自己開發個 blog 出來?
為什麼你就不能告訴我,該怎麼把我目前的資料分析結果,迅速挪到 Web 頁面上,跟使用者實時互動?
雖然二者的結果,都是做一個 Web 應用出來。但是,它們關注的焦點,需要的功能,能一樣嗎?
但是人家寫書和做教程的人,就是不疾不徐,堅持一定要教會你,如何做一個 blog 出來……
你不學,又能怎麼辦呢?你難道想只憑 Python 指令碼,就做一個 Web 應用出來?
還真別說,最近,這個事兒從幻想,變成了現實。
樣例
這不,我就用純 Python 指令碼寫了個 Web 應用。
我編寫的程式碼裡,沒有一絲半毫的 Web 框架,Javascript,甚至是 HTML 。
這玩意兒能用嗎?
你自己來試試看。
請你開啟瀏覽器,輸入以下連結:
你會看到下面的初始化介面。
初始化完畢之後,頁面會分成左右兩欄。左面是兩個下拉候選框,分別讓你指定需要分析的資料範圍。
上面一個,是事件型別;
下面一個,是事件發生歸屬地。
如果你看過我的文章《如何用 Python 和迴圈神經網路預測嚴重交通擁堵?》,應該對這個資料集很熟悉。
只不過,當時我們更注重的,是用迴圈神經網路搭建了一個嚴重擁堵事件預測模型。
而今天,我們是要進行探索性資料分析,也就是根據我們感興趣的目標,對資料進行整理操作,然後視覺化顯示。
選定之後,你會看到右側提示兩個資訊:
你篩選之後,資料框包含行數
-
在層疊地圖上的視覺化結果。
怎麼樣?
麻雀雖小,五臟俱全。
雖然我們們這個 Web 應用很簡單,不過互動分析該有的功能和流程,基本上都涵蓋了。
你可能會問:
王老師,編這麼一個應用出來,不簡單吧?
讓我帶你到幕後,看看是不是很複雜。
幕後
我把這個應用的全部原始碼,都為你儲存到了 Github 上。請你訪問這個網址獲取:
可以看到,一共包含了 4 個檔案。
有意思的是,其中 3 個,包括:
Procfile
setup.sh
requirements.txt
都只是部署到遠端伺服器時,需要用到的配置檔案而已。
也就是說,只有最後一個 helloworld.py 是主角,它包含了實現我們們全部互動式資料分析功能的 Python 指令碼檔案。
這程式碼,少說也得有幾百行吧?
別擔心,開啟來看看:
上面這張截圖,就已經包含了實現互動資料分析功能的全部程式碼。
神奇吧?
解讀
這麼短的程式碼,為什麼能有如此強大的功能?
這是因為它背後使用的一個軟體包,叫做 streamlit 。
它是幹什麼用的?
一言以蔽之,給你賦能,讓你能夠不去操心什麼前端後端。只寫 Python ,只關注功能,你就能寫出一個互動式 Web 應用出來。
當然,既然最後是 Web 應用,那麼實際上前後端的功能都是齊備的。
只不過,這些交由 Streamlit 來幫你費心操辦。你根本不用管。
爆發
為什麼會有人做了這麼一款神器出來?
原因很簡單,我們們前面提到的痛點,是大夥兒都有的。
我們們這些麻瓜(Muggle),遇到痛點只能忍著。
但是真正的魔法師(優秀程式設計師),是忍不了的。
在這段來自 PyData LA 2019 的影片裡,Streamlit 的 CEO Adrien Treuille 談及了他在資料智慧企業中,長期遭遇的痛點。
最大的痛點,就是資料科學家訓練好機器學習模型後,需要驗證效果,和使用者反饋溝通。
但是,做機器學習的工程師本身,並不掌握這一整套的工具棧。
所以,就得在把全部的資料分析和模型訓練工作完成後,把這東西移交給一個工具製作團隊。
人家做完以後,就告訴資料科學團隊說,做好了。但是注意,現在處於需求凍結階段。這個應用你們可以隨便用,只是別亂改。改壞了我們管不了。因為最近兩個月,我們還得給其他若干資料分析團隊做 app 。大概幾個月以後,我們又能回來幫助你們了……
Adrien Treuille 很敏銳地捕捉到了這個長期痛點,於是在 2018 年, 創立了 streamlit 。
目標很簡單,給資料科學團隊提供簡單的工具,讓他們使用已經掌握的 Python 程式設計技能,就能直接做 Web 應用。
什麼 “等上兩三個月不許改”?!你們自己慢慢兒玩兒去吧,我們想怎麼改,就怎麼改!
至於做出來的東西嘛,可以是這樣的:
資源
看到這裡,是不是心動了?也打算學習一下 Streamlit ?
沒問題,我前面給你提供的樣例,就在 github 上,你可以直接檢視原始碼。
如果你希望重現這個小應用,並且一步步學習掌握 Streamlit 的基礎知識和技能,我也已經為你寫好了一份手把手的教程。地址在這裡。
它不僅教你如何設定環境,安裝工具,寫作程式碼,甚至連如何免費部署到 heroku 平臺,讓使用者使用,都毫無保留地教給了你。
那篇文章,我用於參加少數派年度徵文活動,所以就不能全文展示在這裡了。
讀完以後,如果你覺得有收穫,歡迎在少數派平臺上幫我點個贊。謝謝支援!
思考
嘗試過之後,你應該不難發現,Streamlit 給你帶來了什麼。
如果你學過 Javascript 和 Flask, Django 等 Web 應用開發技術,Streamlit 可以加快你的 Web 應用開發與測試程式。
如果你還沒有學過上述技術, Streamlit 可以給你賦能,讓你一下子有了把資料分析結果變成產品的能力。
給你講點兒更激進的。
有人已經希望能用它替代掉 Flask 用於產品釋出了。
還有人說,將來寫技術文件,也應該充分使用 Streamlit 。
甚至,還把它比作了資料科學界的 iPhone 。
這裡,它是借喻 iPhone 開啟智慧手機時代,說明 Streamlit 的劃時代性。
我不希望你也變得如此激進。
因為這裡提到的每一種功用,現在還都有非常專業的工具做的更好,而且新的工具也在不斷湧現。
例如說,我們在多個教程中一直使用 Jupyter Notebook 。
現在憑藉 Voila 擴充套件的加持,你也可以很輕鬆地把 Jupyter Notebook 變成 Web app ,而且可以免費執行在 mybinder 上面。
但是,你可以看到,一個新的工具,以一種簡單,而不是更繁複的辦法,解決一個功能痛點,是一件多麼令人欣喜的事兒。
看了這篇文章,可能會給你一種誤解,似乎 JavaScript 為代表的前端程式設計技術,再也不需要學了。
其實不是這樣的。
可以想象,開發門檻降低以後,將來會有更多的人使用 Python 來做 Web 應用。
用 Streamlit 這樣的方法,他們只是開發出了一個原型。
要是想打造精品,就必須精細調控很多細節。
這時候, 如果你精通 Javascript ,那你潛在的合作物件一下子就多了起來,你掌握的這門技術,也就有了更大的價值。
還記得嗎?我不止一次給你強調過,比起一個工具自身的能力來,協作網路更重要。忘了的話,記得複習《學 Python ,能提升你的競爭力嗎?》。
這就好像印刷術的發明,不是讓會寫字這件事兒變得失去價值,而是全社會都增大了對好作品的渴求。深刻的思考,加上有效的文字表達,會讓你生存得更好。
當然,如果你不希望精通寫作技藝,只是想做一個抄書匠餬口。那麼印刷術就可能會替代你的工作,結果就不那麼美妙了。
小結
這篇文章,我為你介紹了 Streamlit 這款有趣的工具。希望你讀過之後,掌握了以下知識點:
藉助 Streamlit ,你可以用純 Python 編制 Web 應用;
學 Web 設計依然很有前途,因為你的潛在合作群體正在迅速擴大;
不要惹魔法師(優秀程式設計師)。他們的痛點需求會轉化成無盡的戰鬥力,興許會直接替掉你的日常工作。
更多Python知識,請關注:!!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4560/viewspace-2833308/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Solon 1.6.18 釋出,輕量級應用開發框架框架
- Solon 1.6.25 釋出,輕量級應用開發框架框架
- CherryPy :一個輕量級的 Python Web 框架PythonWeb框架
- hibernate《輕量級框架應用與開發--S2SH》筆記框架筆記
- Midori:輕量級開源 Web 瀏覽器Web瀏覽器
- 《Flask Web開發 基於Python的Web應用開發實戰》簡評FlaskWebPython
- 輕量級Web框架Flask(二)Web框架Flask
- 構建高效的 Python Web 應用:最佳實踐指南PythonWeb
- 為你的Go應用建立輕量級Docker映象?GoDocker
- lit Web元件:構建快速、輕量級的 Web 元件Web元件
- 開發Web應用Web
- Golang web filter 輕量級實現GolangWebFilter
- 如何提升 Web 應用的程式碼質量Web
- C# 輕量級 ORM 框架 NPoco 的簡單應用C#ORM框架
- WebStorm 2023:打造高效、高質量的Web應用 mac/win版WebORMMac
- 《Flask Web開發:基於Python的Web應用開發實戰》學習筆記(二)FlaskWebPython筆記
- HttpServer: 基於IOCP模型且整合Openssl的輕量級高效能web伺服器HTTPServer模型Web伺服器
- python輕量級效能工具-LocustPython
- 輕量級 Web 元件編譯器 — StencilWeb元件編譯
- 輕量級 Web 框架 Gin 結構分析Web框架
- LogFX:JavaFX編寫一個漂亮、輕量級的日誌檢視器
- 「造個輪子」——cicada(輕量級 WEB 框架)Web框架
- GJLightBlueTooth——一個輕量級的iOS藍芽開發庫iOS藍芽
- 用go設計開發一個自己的輕量級登入庫/框架吧Go框架
- 9 個提高系統執行速度的輕量級 Linux 應用Linux
- Web | 淺談用Python進行Web開發WebPython
- 開源推薦:一款輕量級、高效能的電商系統
- Python的web開發PythonWeb
- 【原創】基於.NET的輕量級高效能 ORM - XFrameworkORMFramework
- 一個庫幫你輕鬆的建立漂亮的.NET控制檯應用程式
- 使用 Flutter 開發簡單的 Web 應用FlutterWeb
- [譯] Rust 開發完整的 Web 應用程式RustWeb
- spellsql 高效能sql拼接器和輕量級ormSQLORM
- Nginx初步(反向代理/Web伺服器/輕量級)NginxWeb伺服器
- BizWorks助力企業應用的高效開發與複用
- 如何理解Python web開發技術PythonWeb
- Go Web輕量級框架Gin學習系列:多種資料響應格式GoWeb框架
- Spring 5| 輕量級的開源JavaEE框架SpringJava框架