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