1. 程式人生 > >《Flask Web開發》學習筆記_1

《Flask Web開發》學習筆記_1

第一部分 Flask簡介

  前言:想熟練掌握一門web框架,為以後即將誕生的測試工具集做準備。為什麼選擇flask要做熟練掌握的一門框架,而不是其他的,最主要的原因是可以隨意定製。

  特別提醒:這本書的程式碼會提交在github,有基礎的人可以直接看github的程式碼來學習flask。基礎差還是建議買書來學習,書中會有對“為什麼這麼用?”的解答,可以增加對軟體架構的深入理解

  時間:閱讀並操作完第一部分,做的總結

  建議:文章中有不對的地方,希望你可以告訴我

 

一、梳理

第一部分是Flask框架的基礎應用,作者Miguel Grinberg(後面簡稱MG),一位擁有25年開發經驗的人(25年的經驗肯定能解決很多的“坑”),這一部門會涉及到6個模組,來完成一個大程式需要的程式碼架構,書中很好的解釋了一些問題。

1,程式的基本結構     # 初始化app、路由、檢視函式、flask框架的設計理念

2,模板        # Jinja2模板引擎、Flask-Bootstrap、錯誤頁面、靜態檔案、Moment本地化時間

3,web表單      # CSRF(Cross-Site Request Forgery)防護、form渲染、flask核心特性Flash

4,資料庫       #  介紹SQL和NoSQL的區別、SQLAlchemy資料庫框架、Flask-Migrate資料庫遷移

5,電子郵件     #  Flask-Mail包裝了smtplib

6,大型程式的結構    # 安排程式碼結構

這6個模組會涉及到具體的技術細節,有些比較重要,有些很難理解(blueprint藍圖),這裡都會進行記錄。上面的內容以“概念地圖”(什麼是概念地圖)的方式呈現,能夠更好的理解各個之間的關係

 


二、要點記錄

1,Flask程式都必須建立一個app例項,app例項是Flask類的物件,FLask(__name__)引數決定了程式的根目錄

2,單個檔案的程式,使用@app.route('/')裝飾器來為函式註冊路由

3,Flask支援動態url,在route裝飾器中使用'/user/<name>',尖括號的內容就是動態部分

4,Flask使用上下文臨時把某些物件變為全域性可訪問,使用前要確保將其啟用:【程式上下文全域性變數】current_app、g【請求上下文全域性變數】request、session

5,Jinja2支援巨集(等同python函式)

6,模板繼承:如果父模板的block標籤內不為空,要新增{{ supper() }};子模板extends命令宣告該模板繼承自哪裡

7,url_for()不僅可以在檢視函式中,而且還可以在模板中使用

8,Flask-Moment不僅要有moment.js,還要依賴jquery.js,而在flask_bootstrap中已經有jquery.js,所以要在模板引入momen.js

9,Flask-WTF的form能夠防CSRF(跨站請求偽造)攻擊,思路:在app內設定祕鑰,Flask-WTF會生成加密token(令牌),再用token驗證請求中的form資料的真假

10,Flask-WTF驗證機制:每個form都繼承自Form類,Form類定義表單一組欄位,每個欄位都用物件表示。欄位物件可附屬一個或多個驗證函式,驗證函式就是用來驗證使用者提交form的輸入值是否符合要求

11,Flask-Bootstrap提供預先定義好的表單樣式渲染整個Flask-WTF表單:{{ wtf.quick_form(form) }} 

12,判斷所有驗證函式是否接收的欄位:validate_on_submit() True/False

13,瀏覽器重新整理會重新提交前一個請求,post表單請求需要重定向到get請求:使用Flask的redirect(url_for('index'))

*14,Flask的flash是核心特性:提醒使用者的資訊已經被更改

15,SQL資料庫特點:列數固定、行數可變、特殊的列[主鍵]、表之間關聯[外來鍵],行之間的這種聯絡就是關係型資料庫

16,NoSQL資料庫特點:集合代替表,文件代替記錄

17,Flask-SQLAlchemy是關係型資料庫框架,要通過資料庫會話session(事務)才能跟新資料庫;資料庫會話能保證資料庫的一致性

18,Flask-Migrate對Alembic遷移框架做了輕量包裝,並整合到Flask-Script;Alembic是SQLAlchemy的主力開發人員編寫的遷移框架

19,Flask-Migrate使用:配置、init建立遷移倉庫、migrate自動構建遷移指令碼(要檢查遷移指令碼)、upgrade提交到資料庫中

20,Flask-Mail使用非同步+Celery任務佇列將郵件傳送遷移到後臺執行緒,優化客戶的載入體驗

21,在單元測試中,需要在不同配置環境執行程式:使用程式工廠函式,可以動態修改配置,建立多個程式例項

22,程式工廠函式,讓定義路由變的複雜,程式在執行時建立,只有呼叫create_app()之後才能使用app.route裝飾器;flask提供的blueprint藍圖,就是解決這個問題

23,藍圖機制:藍圖中定義的路由處於休眠狀態,直到藍圖註冊到程式中,路由才成為程式一部分

24,藍圖使用:建立藍圖[登記]、註冊藍圖;路由裝飾器由藍圖提供、url_for('main.index'/'.index')使用改變