<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>

          Python 輕量級 Web 框架:Bottle 庫!

          共 2272字,需瀏覽 5分鐘

           ·

          2022-08-26 23:00


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

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


           

          一. Bottle庫安裝


          1)使用pip安裝

          pip install bottle


          2)下載Bottle文件

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



           

          二.“HelloWorld!”


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


          先上代碼:
          首先我們從bottle庫中導(dǎo)入getrun兩個方法。


          接下來,我們要構(gòu)建一個網(wǎng)站,首先要有一個ip地址和一個端口(port),這部分功能由run來完成,在測試環(huán)節(jié)我們就使用127.0.0.1(本機地址)和80端口(瀏覽器默認端口)來運行這段代碼 python HelloWorld.py


          這樣網(wǎng)站服務(wù)器就處于運行狀態(tài)啦,打開瀏覽器,輸入127.0.0.1(:80)


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


          瀏覽器訪問ip地址時,即向這個ip發(fā)送了get請求,等待返回網(wǎng)頁數(shù)據(jù),那么我們的bottle庫里,封裝了get方法,用來實現(xiàn)這一過程。


          代碼如下:


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


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


          run函數(shù)還有一個參數(shù)reloader,將其設(shè)置為True將會打開自動重載,網(wǎng)頁服務(wù)器會在你做出任何更改時自動重載服務(wù)器,可實現(xiàn)網(wǎng)站的熱更新。


           

          三.動態(tài)路由及文件下載


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


          那么如果是服務(wù)器運行時呢?比如說網(wǎng)站服務(wù)器上存取文件,當(dāng)然不能采取靜態(tài)的方式,這時候我們就可以采用動態(tài)路由。


          Bottle的動態(tài)路由,由route方法實現(xiàn),和get類似,也是采用裝飾器來修飾函數(shù)實現(xiàn)路由功能。

          這里我們看到在裝飾器的參量中出現(xiàn)了一個與眾不同的東西:'name'。被其修飾的函數(shù)的參數(shù)與冒號后的參量同名,而在函數(shù)中,就可以使用name這個參數(shù)作為處理變量,最后返回響應(yīng)即可。

          而動態(tài)路由即可為文件路由提供便利。一個服務(wù)器中可能存放著成百上千的文件,不可能每個都依靠靜態(tài)地址。
          這里我們可以看到一個新的函數(shù)static_file,第一個參數(shù)為文件名,第二個參數(shù)為根目錄地址(即這個文件所在的位置),當(dāng)前文件系統(tǒng)為:
          --HelloWorld.py
          --store1.txt


          訪問瀏覽器得到

          當(dāng)然你也可以把文件放在文件夾里,只要把root參數(shù)更換成文件夾的地址即可。



           

          四. POST的響應(yīng)與文件上傳


          如果要實現(xiàn)更復(fù)雜的功能,我們不但需要使用GET方法,也需要POST方法。這里我們使用HTML語言中的Form來演示Bottle庫對于POST請求的響應(yīng)。

          首先我們實現(xiàn)一個上傳文件的窗口,如上。

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

          接下來的POST響應(yīng),代碼如下:
          從Bottle庫中導(dǎo)入post方法和request。

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

           

          接下來我們進行一次測試:
          點擊上傳后,我們打開服務(wù)器根目錄(就是python文件的位置),查看發(fā)現(xiàn)文件已經(jīng)上傳成功!


           

          五.小結(jié)


          在完成這些功能后,你一定想把bottle部署到網(wǎng)絡(luò)上吧,畢竟只在本地運行的話,網(wǎng)站又有什么作用呢?


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


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

          原文出自:https://blog.csdn.net/qiqi1220/article/details/126030157


          訓(xùn)練營本周六開課,如想進一步提升測開技能,推薦閱讀:

          1. 重磅消息 | 2022年最新全棧測試開發(fā)技能實戰(zhàn)指南(第3期)



          END

          所有原創(chuàng)文章
          第一時間發(fā)布至此公眾號「測試開發(fā)技術(shù)」

          長按二維碼/微信掃碼  添加作者

          瀏覽 48
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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美女被操网站 |