Github排名中的Python web框架Flask學習方法,非常受用!

Github排名中的Python web框架Flask學習方法,非常受用!
flask最近終於發佈了它的1.0版本更新,從項目開源到最近的1.0版本flask已經走過了8個年頭。
Github排名中的Python web框架Flask學習方法,非常受用!
運行python app.py,訪問http://localhost:5000/就能看到輸出了Hello World!flask誕生在八年前的愚人節,原本只是作者隨便寫着玩的,想不到一下子就流行起來了。在這八年期間,flask從未發行過一個正式的版本,不過它依然成爲了github內最受大家喜歡的Python web框架 ;flask內核內置了兩個最重要的組件,其它所有的組件都是通過易擴展的插件系統集成進來的。這兩個內置的組件分別是werkzeug和jinja2。
Github排名中的Python web框架Flask學習方法,非常受用!
werkzeug用於編寫Python WSGI程序的工具包,在開源社區備受喜愛,它的源碼是Python技術領域最值得閱讀的開源庫。
Github排名中的Python web框架Flask學習方法,非常受用!
運行python wsgi.py打開瀏覽器訪問http://localhost:4000/就可以看到頁面輸出了Hello World!
Github排名中的Python web框架Flask學習方法,非常受用!
jinja2是一個功能極爲強大的模板系統,它完美支持unicode中文,每個模板都運行在安全的沙箱環境中,使用jinja2編寫的模板代碼非常優美。
Github排名中的Python web框架Flask學習方法,非常受用!
werkzeug和jinja2這兩個庫的一起特點是編寫的代碼賞心悅目,作者Armin Ronacher挑選這兩個庫來作爲flask的柱石闡明作者有十分挑剔的代碼品味。作者是一位來自澳大利亞的帥哥!

歐了歐了 咱們一起來體會flask的奇特魅力吧!

安裝flask

<pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">pip install flask

</pre>

圓周率計算API
Github排名中的Python web框架Flask學習方法,非常受用!
圓周率可以使用正整數的平方倒數之和求得,當這個級數趨於無限時,值會越來越接近圓周率。
Github排名中的Python web框架Flask學習方法,非常受用!
運轉python flask_pi.py,翻開瀏覽器拜訪http://localhost:5000/pi?n=1000000,能夠看到頁面輸出3.14159169866,這個值同圓周率現已非常挨近。

留意pi()的回來值不能是浮點數,所以必須運用str轉換成字符串

再仔細觀察代碼,你還會留意到一個特別的變量request,它看起來似乎是一個全局變量。從全局變量裏拿當時懇求參數,這非常奇怪。如果在多線程環境中,該怎麼確保每個線程拿到的都是當時線程正在處理的懇求參數呢?所以它不能是全局變量,它是線程局部變量,線程局部變量外表上和全局變量沒有不同,但是在拜訪線程局部變量時,每個線程得到的都是當時線程內部同享的目標。

緩存覈算成果

爲了防止重複覈算,咱們將現已覈算的pi(n)值緩存起來,下次就能夠直接查詢。一起咱們不再只回來一個單純的字符串,咱們回來一個json串,裏邊有一個字段cached用來標識當時的成果是否從緩存中直接獲取的。
Github排名中的Python web框架Flask學習方法,非常受用!
運行python flask_pi.py,打開瀏覽器訪問http://localhost:5000/pi?n=1000000,可以看到頁面輸出
Github排名中的Python web框架Flask學習方法,非常受用!
讀者也許會問,爲什麼緩存類PiCache需要使用RLock呢?這是因爲考慮到多線程環境下Python的字典讀寫不是完全線程安全的,需要使用鎖來保護一下數據結構。

分佈式緩存

上面的緩存僅僅是內存緩存,進程重啓後,緩存結果消失,下次計算又得重新開始。
Github排名中的Python web框架Flask學習方法,非常受用!
如果開啓第二個端口5001來提供服務,那這第二個進程也無法享受第一個進程的內存緩存,而必須重新計算。所以這裏要引入分佈式緩存Redis來共享計算緩存,避免跨進程重複計算,避免重啓重新計算。
Github排名中的Python web框架Flask學習方法,非常受用!
運行python flask_pi.py,打開瀏覽器訪問http://localhost:5000/pi?n=1000000,可以看到頁面輸出
Github排名中的Python web框架Flask學習方法,非常受用!
重啓進程,再次刷新頁面,能夠看書頁面輸出的cached字段依然是true,闡明緩存成果不再由於進程重啓而丟掉。

MethodView

寫過Django的朋友們可能會問,Flask是否支撐類方法的API編寫方法,答覆是必定的。下面我們運用Flask原生支撐的MethodView來改寫一下上面的服務。
Github排名中的Python web框架Flask學習方法,非常受用!
咱們完成了MethodView的get辦法,闡明該API僅支撐HTTP懇求的GET辦法。假如要支撐POST、PUT和DELETE辦法,需要用戶自己再去完成這些辦法。

flask默許的MethodView挺好用,可是也不行好用,它無法在一個類裏供給多個不同URL名稱的API效勞。所以接下來咱們引進flask的擴展flask-classy來解決這個問題。

小試flask擴展flask-classy

運用擴展的第一步是安裝擴展pip install flask-classy,然後咱們在同一個類裏再加一個新的API效勞,覈算斐波那契級數。
Github排名中的Python web框架Flask學習方法,非常受用!
Github排名中的Python web框架Flask學習方法,非常受用!
訪問http://localhost:5000/fib/100,我們可以看到頁面輸出了
Github排名中的Python web框架Flask學習方法,非常受用!

好了,關於Python web框架Flask的分享就到這裏,如果你跟我一樣都喜歡python,想成爲一名優秀的程序員,也在學習python的道路上奔跑,歡迎你加入python學習羣:839383765 羣內每天都會分享最新業內資料,分享python免費課程,共同交流學習,讓學習變(編)成(程)一種習慣!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章