flask最近終于發(fā)布了它的1.0版本更新,從項(xiàng)目開源到最近的1.0版本flask已經(jīng)走過了8個(gè)年頭。 運(yùn)行python app.py,訪問http://localhost:5000/就能看到輸出了Hello World!flask誕生在八年前的愚人節(jié),原本只是作者隨便寫著玩的,想不到一下子就流行起來了。在這八年期間,flask從未發(fā)行過一個(gè)正式的版本,不過它依然成為了github內(nèi)最受大家喜歡的Python web框架 ;flask內(nèi)核內(nèi)置了兩個(gè)最重要的組件,其它所有的組件都是通過易擴(kuò)展的插件系統(tǒng)集成進(jìn)來的。這兩個(gè)內(nèi)置的組件分別是werkzeug和jinja2。 werkzeug用于編寫Python WSGI程序的工具包,在開源社區(qū)備受喜愛,它的源碼是Python技術(shù)領(lǐng)域最值得閱讀的開源庫。 運(yùn)行python wsgi.py打開瀏覽器訪問http://localhost:4000/就可以看到頁面輸出了Hello World! jinja2是一個(gè)功能極為強(qiáng)大的模板系統(tǒng),它完美支持unicode中文,每個(gè)模板都運(yùn)行在安全的沙箱環(huán)境中,使用jinja2編寫的模板代碼非常優(yōu)美。 werkzeug和jinja2這兩個(gè)庫的一起特點(diǎn)是編寫的代碼賞心悅目,作者Armin Ronacher挑選這兩個(gè)庫來作為flask的柱石闡明作者有十分挑剔的代碼品味。作者是一位來自澳大利亞的帥哥! 歐了歐了 咱們一起來體會(huì)flask的奇特魅力吧! 安裝flask pip install flask 圓周率計(jì)算API 圓周率可以使用正整數(shù)的平方倒數(shù)之和求得,當(dāng)這個(gè)級(jí)數(shù)趨于無限時(shí),值會(huì)越來越接近圓周率。 運(yùn)轉(zhuǎn)python flask_pi.py,翻開瀏覽器拜訪http://localhost:5000/pi?n=1000000,能夠看到頁面輸出3.14159169866,這個(gè)值同圓周率現(xiàn)已非常挨近。 留意pi的回來值不能是浮點(diǎn)數(shù),所以必須運(yùn)用str轉(zhuǎn)換成字符串 再仔細(xì)觀察代碼,你還會(huì)留意到一個(gè)特別的變量request,它看起來似乎是一個(gè)全局變量。從全局變量里拿當(dāng)時(shí)懇求參數(shù),這非常奇怪。如果在多線程環(huán)境中,該怎么確保每個(gè)線程拿到的都是當(dāng)時(shí)線程正在處理的懇求參數(shù)呢?所以它不能是全局變量,它是線程局部變量,線程局部變量外表上和全局變量沒有不同,但是在拜訪線程局部變量時(shí),每個(gè)線程得到的都是當(dāng)時(shí)線程內(nèi)部同享的目標(biāo)。 緩存核算成果 為了防止重復(fù)核算,咱們將現(xiàn)已核算的pi(n)值緩存起來,下次就能夠直接查詢。一起咱們不再只回來一個(gè)單純的字符串,咱們回來一個(gè)json串,里邊有一個(gè)字段cached用來標(biāo)識(shí)當(dāng)時(shí)的成果是否從緩存中直接獲取的。 運(yùn)行python flask_pi.py,打開瀏覽器訪問http://localhost:5000/pi?n=1000000,可以看到頁面輸出 讀者也許會(huì)問,為什么緩存類PiCache需要使用RLock呢?這是因?yàn)榭紤]到多線程環(huán)境下Python的字典讀寫不是完全線程安全的,需要使用鎖來保護(hù)一下數(shù)據(jù)結(jié)構(gòu)。 分布式緩存 上面的緩存僅僅是內(nèi)存緩存,進(jìn)程重啟后,緩存結(jié)果消失,下次計(jì)算又得重新開始。 如果開啟第二個(gè)端口5001來提供服務(wù),那這第二個(gè)進(jìn)程也無法享受第一個(gè)進(jìn)程的內(nèi)存緩存,而必須重新計(jì)算。所以這里要引入分布式緩存Redis來共享計(jì)算緩存,避免跨進(jìn)程重復(fù)計(jì)算,避免重啟重新計(jì)算。 運(yùn)行python flask_pi.py,打開瀏覽器訪問http://localhost:5000/pi?n=1000000,可以看到頁面輸出 重啟進(jìn)程,再次刷新頁面,能夠看書頁面輸出的cached字段依然是true,闡明緩存成果不再由于進(jìn)程重啟而丟掉。 MethodView 寫過Django的朋友們可能會(huì)問,F(xiàn)lask是否支撐類方法的API編寫方法,答復(fù)是必定的。下面我們運(yùn)用Flask原生支撐的MethodView來改寫一下上面的服務(wù)。 咱們完成了MethodView的get辦法,闡明該API僅支撐HTTP懇求的GET辦法。假如要支撐POST、PUT和DELETE辦法,需要用戶自己再去完成這些辦法。 flask默許的MethodView挺好用,可是也不行好用,它無法在一個(gè)類里供給多個(gè)不同URL名稱的API效勞。所以接下來咱們引進(jìn)flask的擴(kuò)展flask-classy來解決這個(gè)問題。 小試flask擴(kuò)展flask-classy 運(yùn)用擴(kuò)展的第一步是安裝擴(kuò)展pip install flask-classy,然后咱們?cè)谕粋€(gè)類里再加一個(gè)新的API效勞,核算斐波那契級(jí)數(shù)。 訪問http://localhost:5000/fib/100,我們可以看到頁面輸出了 好了,關(guān)于Python web框架Flask的分享就到這里,如果你跟我一樣都喜歡python,想成為一名優(yōu)秀的程序員,也在學(xué)習(xí)python的道路上奔跑,歡迎你加入python學(xué)習(xí)群:839383765 群內(nèi)每天都會(huì)分享最新業(yè)內(nèi)資料,分享python免費(fèi)課程,共同交流學(xué)習(xí),讓學(xué)習(xí)變(編)成(程)一種習(xí)慣! |
|