Bottle 庫:Python 輕量級 Web 框架

Bottle 是一個超輕量級的 python 庫。說是庫,其本身只由一個 4000 行左右的文件構成,並且不需要任何依賴,只靠 python 標準庫即可運作。

和它本身的輕便一樣,Bottle 庫的使用也十分簡單。相信在看到本文前,讀者對 python 也已經有了簡單的瞭解。那麼究竟何種神祕的操作,才能用百行代碼完成一個服務器的功能?讓我們拭目以待。

一. Bottle 庫安裝

1)使用 pip 安裝

圖片

2)下載 Bottle 文件

https://github.com/bottlepy/bottle/blob/master/bottle.py

二.“HelloWorld!”

所謂萬事功成先 HelloWorld,從這個簡單的示例中,瞭解 Bottle 的基本機制。

先上代碼:

圖片

首先我們從 bottle 庫中導入 getrun 兩個方法。

接下來,我們要構建一個網站,首先要有一個 ip 地址和一個端口(port),這部分功能由 run 來完成,在測試環節我們就使用 127.0.0.1(本機地址)和 80 端口(瀏覽器默認端口)來:

運行這段代碼 python HelloWorld.py

圖片

這樣網站服務器就處於運行狀態啦,打開瀏覽器,輸入 127.0.0.1(:80)

圖片

熟悉的 404,錯誤提示 Not found:‘/’。這是當然的,因爲網站除了服務器之外,還有很重要的成分——網頁啊!

瀏覽器訪問 ip 地址時,即向這個 ip 發送了 get 請求,等待返回網頁數據,那麼我們的 bottle 庫裏,封裝了 get 方法,用來實現這一過程。

代碼如下:

圖片

不知道大家是否認識 def 上面的 @符號,這個符號是 python 語法中的裝飾器的意思,可以簡單的理解爲使用 get 函數對 homepage 進行修飾。在這裏,@get(‘/’) 即將 homepage 裝飾成了瀏覽器發送 GET 127.0.0.1 / 這個請求時的相應函數。可以做任意處理,最後返回 get 請求的相應。這裏就返回了簡單的 HelloWorld 頁面,再次運行,就有這樣的效果:

圖片

也可以使用 bottle 中封裝的 template 方法,將網頁數據單獨寫在. tpl 文件中,示例如下:

圖片

run 函數還有一個參數 reloader,將其設置爲 True 將會打開自動重載,網頁服務器會在你做出任何更改時自動重載服務器,可實現網站的熱更新。

三.動態路由及文件下載

如上我們使用的 get(‘/’),本質上是一種靜態路由,在服務器運行前就確定好的地址可以用這種方法來進行路由。

那麼如果是服務器運行時呢?比如說網站服務器上存取文件,當然不能採取靜態的方式,這時候我們就可以採用動態路由。

Bottle 的動態路由,由 route 方法實現,和 get 類似,也是採用裝飾器來修飾函數實現路由功能。

圖片

這裏我們看到在裝飾器的參量中出現了一個與衆不同的東西:'name'。被其修飾的函數的參數與冒號後的參量同名,而在函數中,就可以使用 name 這個參數作爲處理變量,最後返回響應即可。

圖片

而動態路由即可爲文件路由提供便利。一個服務器中可能存放着成百上千的文件,不可能每個都依靠靜態地址。

圖片

這裏我們可以看到一個新的函數 static_file,第一個參數爲文件名,第二個參數爲根目錄地址(即這個文件所在的位置),當前文件系統爲:

--HelloWorld.py

--store1.txt

訪問瀏覽器得到

圖片

當然你也可以把文件放在文件夾裏,只要把 root 參數更換成文件夾的地址即可。

四. POST 的響應與文件上傳

如果要實現更復雜的功能,我們不但需要使用 GET 方法,也需要 POST 方法。這裏我們使用 HTML 語言中的 Form 來演示 Bottle 庫對於 POST 請求的響應。

圖片

首先我們實現一個上傳文件的窗口,如上。

此處的頁面爲一個簡單的表單提交界面,在此不做詳細介紹,打開頁面如下:

圖片

接下來的 POST 響應,代碼如下:

圖片

從 Bottle 庫中導入 post 方法和 request。

和 get 方法類似,使用 post 裝飾響應函數,之後在函數體中使用 request 即可獲取網站服務器接受到的 post 請求體。request.forms.get() 方法可以將表單中對應 Key 的字符串取出,request.files.get() 方法可以將表單中對應 Key 的文件取出,使用 save 方法將數據儲存就實現了文件的上傳。

接下來我們進行一次測試:

圖片

點擊上傳後,我們打開服務器根目錄(就是 python 文件的位置),查看發現文件已經上傳成功!

圖片

五.小結

在完成這些功能後,你一定想把 bottle 部署到網絡上吧,畢竟只在本地運行的話,網站又有什麼作用呢?

清華網爲我們每一個網絡接入點都提供了公網 ip,在 cmd 中使用 ipconfig 查看 ip 地址,將 run 中的運行參數改爲你的公網 ip,然後在任何一臺設備的瀏覽器上(建議手機,電腦瀏覽器有時候會很慢)輸入 ip 地址和端口號 (默認 80),就可以訪問啦!

Bottle 庫還有很多強大的功能,Cookie 的讀寫、插件的安裝卸載與禁用都不在話下,也可以將 Bottle 部署到其他的服務器,非常簡單的實現多線程,這些功能有待讀者大大發掘哦!

Python 研究者 喜歡研究 Python 各種應用。包括但不僅限於爬蟲,數據分析 & 可視化,自動化辦公,以及開發日常生活工作中等小工具,回覆【資料】領取 Python 學習大禮包。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/NJC5fPt5g0jiWmG64kKw1w