怎样学习flask
怎樣徹底學(xué)習(xí)Flask框架?怎樣學(xué)習(xí)順序比較合理?
1.web框架需要快速入門
? Web框架是一組工具的集合, 為你的Web應(yīng)用開發(fā)提供了基礎(chǔ)環(huán)境, 從如何獲取參數(shù),到如何返回結(jié)果, 從如何獲取cookie到如何修改返回的http header。Web框架幫你隱藏了HTTP協(xié)議的細(xì)節(jié), 你作為一個使用者只需要關(guān)心如何實(shí)現(xiàn)功能,而不需要底層到底實(shí)現(xiàn)的是什么。
2.Web框架很多, 不同的語言都有自己實(shí)現(xiàn)的不同的Web框架. 每一種都有各自不同的實(shí)現(xiàn)思路, 有不同的開發(fā)哲學(xué), 不管是就換工作換開發(fā)棧的需要, 還是學(xué)習(xí)本身的需要, 快速的多掌握幾個框架還是很有必要的.
3.web框架的工作方式
現(xiàn)代的Web框架,不管其采用何種設(shè)計(jì)思想, 開發(fā)哲學(xué), 根本的工作模式是相似的,均是從接收HTTP請求,處理HTTP的各項(xiàng)參數(shù),路由到相應(yīng)的用戶實(shí)現(xiàn)的處理器上, 再獲取返回的結(jié)果, 生成HTTP的Response。
流程圖: blockchain
4.web框架的工作流程
URL路由
? 一般來說現(xiàn)在大部分的Web框架對于將HTTP請求交給哪一個邏輯來處理, 是由URL路由框架的模塊來決定的. URL路由模塊會提供一些函數(shù)或者裝飾器等方式, 讓用戶來寫一些代碼, 將URL和控制器的綁定關(guān)系注冊到框架中. 大多數(shù)的框架都支持在URL路由的定義中使用正則表達(dá)式.有的支持在URL中定義參數(shù),框架會自動在URL中將參數(shù)截取出來保存在框架的上下文中以供控制器使用.
控制器
? 控制器是用戶自己實(shí)現(xiàn)的類或者函數(shù), 用來處理HTTP請求, 確切的說是指定URL發(fā)來的請求, 并且將業(yè)務(wù)邏輯的結(jié)果返回給框架,有框架去決定如何解析成HTTP的響應(yīng)數(shù)據(jù)輸出.框架需要給控制器提供HTTP請求的完整上下文環(huán)境,那么我們在學(xué)習(xí)框架使用的時候, 首先就要在文檔中整理清楚下面的這些問題:
如何獲取Query String參數(shù)?
? QueryString是url中?后定義的由&符號分割的key=value形式的參數(shù), 框架會在解析HTTP協(xié)議的時候?qū)⑦@個部分的數(shù)據(jù)轉(zhuǎn)化成比如字典之類的數(shù)據(jù)結(jié)構(gòu)存起來, 然后提供相應(yīng)的API去訪問.但是QueryString都是只讀的, 有一些框架會提供一些工具幫助用戶組裝URL, 比如Flask提供了url_for用來組裝轉(zhuǎn)跳到指定控制器的URL, 方便你在頁面上渲染相應(yīng)的標(biāo)簽
如何獲取Form表單的數(shù)據(jù)? json?boby ?
? POST和PUT方法是HTTP協(xié)議中主要的接收數(shù)據(jù)的語義, 傳輸數(shù)據(jù)需要相應(yīng)的編碼方式將數(shù)據(jù)編碼后放在HTTP協(xié)議的Body部分. 編碼方式現(xiàn)在主要有兩種, 一種是最古老的用Form表單編制數(shù)據(jù)的方式, 另外一種是將數(shù)據(jù)用json字符串直接放到HTTP協(xié)議的body部分. 網(wǎng)頁上的應(yīng)用多數(shù)會采用Form表單, 因?yàn)檫@是瀏覽器對Form表單的默認(rèn)支持, 而App的后端大多采用JSONString放在body來傳數(shù)據(jù)的方式, 優(yōu)點(diǎn)是可以傳送復(fù)雜的數(shù)據(jù)結(jié)構(gòu).Web框架會提供相應(yīng)的API去按照這兩種方式獲取Body的內(nèi)容, 但是有的框架會根據(jù)header里的content-type來判斷是不是可以按照J(rèn)SON去解析body的內(nèi)容.
如何讀取和修改cookie?
? cookie是瀏覽器(客戶端)在多次請求之間共享數(shù)據(jù)的一個數(shù)據(jù)結(jié)構(gòu), 因?yàn)镠TTP協(xié)議是無狀態(tài)的,所以cookie在每一次請求的時候都會從瀏覽器放到HTTP請求中傳到服務(wù)端, 在服務(wù)端生成響應(yīng)的時候也會寫入HTTP響應(yīng)里傳回瀏覽器. 從而實(shí)現(xiàn)了在兩次請求之間共享了數(shù)據(jù). Web框架會提供對應(yīng)的API去讀取和修改cookie的值, cookie是key-value形式的, 訪問的方式應(yīng)該和字典類似.
如何獲取 headers ?
? headers對應(yīng)到HTTP協(xié)議中HTTP請求的頭部, 是一個key-value形式的數(shù)據(jù)格式.headers是HTTP請求的一些額外的描述信息, 比如客戶端類型, 字符編碼方式, 認(rèn)證信息等. headers的key是固定的, 你不能自己隨便定義一些特殊key, 并且headers部分也是只讀的.框架會提供對應(yīng)API去讀取headers.
如何實(shí)現(xiàn)頁面轉(zhuǎn)跳 ?
? 有些時候在處理完數(shù)據(jù)后需要通知瀏覽器轉(zhuǎn)跳到對應(yīng)的看數(shù)據(jù)的URL上去, 就需要在文檔里找找如何實(shí)現(xiàn)頁面轉(zhuǎn)跳. 服務(wù)端返回給客戶端一個HTTP協(xié)議中的301或者302的狀態(tài), 就可以讓瀏覽器去執(zhí)行轉(zhuǎn)跳的動作, 作出這樣子的HTTP響應(yīng)在框架中會有對應(yīng)的API.
如何輸出Http響應(yīng) ?
大多數(shù)的Web框架都是用函數(shù)(方法)的返回值來作為Http響應(yīng)的body的, 所以你在很多示例中可以看到 return ‘fu qiang’ 這樣子的寫法, 框架會自動把字符串轉(zhuǎn)換成Response的對象再去做編碼成Http響應(yīng)的操作. 針對App的API會比較方便, 輸出JSON的字符串就行了. 如果是網(wǎng)站的話, 需要輸出HTML頁面,有一些框架提供了內(nèi)置的模板引擎, 用于渲染輸出html內(nèi)容(其實(shí)不限html, xml的內(nèi)容也可以由模板引擎來渲染). 有的框架自己不提供模板引擎, 你可以用你喜歡的模板引擎來渲染.
流程圖如下:
5.web框架所需的開發(fā)環(huán)境
Web框架的開發(fā)環(huán)境由其實(shí)現(xiàn)的語言來決定, 比如說Python的pycharm 和 vscode 等 IDE 集成環(huán)境。
6.web框架一些常用的配置文件
配置Web框架的一些參數(shù),這需要直接看配置文件或者自定義配置文件
7.web框架所需要的模版引擎
? 前面在控制器的部分提到了模板引擎, 模板引擎主要負(fù)責(zé)用數(shù)據(jù)替換模板上的占位符生成最終結(jié)果的文本. 工作方式可以簡化為下圖:
這里詳細(xì)的說一下模板引擎部分在學(xué)習(xí)的時候要注意那一些要點(diǎn):
占位符如何定義
如何定義循環(huán)
如何定義判斷條件
如何對占位符加過濾器
如何定義繼承模板
如何定義嵌套模板
8.web框架的中間件或者鉤子函數(shù)
? 中間件是AOP模式統(tǒng)一在每個請求的開始和結(jié)束部分注入代碼的機(jī)制, 最常見的有兩個級別的中間件, 一個是Application級別的, 也就是在應(yīng)用啟動和結(jié)束的時候執(zhí)行注入的代碼, 另一個是Request級別的, 主要是在每個請求開始和結(jié)束的時候執(zhí)行, 比如統(tǒng)一的鑒權(quán),數(shù)據(jù)庫連接管理(打開,關(guān)閉), 統(tǒng)一的錯誤處理 都可以在這里完成.
9.統(tǒng)一的錯誤處理
? 框架是提供了統(tǒng)一錯誤處理機(jī)制的, 當(dāng)在控制器中發(fā)生了沒有捕獲或者重新拋出的異常的時候, 就會執(zhí)行到統(tǒng)一錯誤處理的部分。
10.鑒權(quán)
? 通過cookie或者auth2.0和中間件可以很輕松的實(shí)現(xiàn)鑒權(quán)和Session機(jī)制。
11.生產(chǎn)部署的方式
? 盡可能的做壓力測試, 以至于讓你的項(xiàng)目能夠正式的上線, 需要了解如何部署生產(chǎn)環(huán)境。
總結(jié)
- 上一篇: python是烂语言吗
- 下一篇: 用Python学分析 - 单因素方差分析