Flask框架學習總結
Flask的特點
輕量、簡潔、擴展性強
常用的擴展包:wtf、sqlalchemy、login、script、migrate、mail
創建虛擬環境:mkvirtualenv 創建虛擬環境,workon 進入虛擬環境,deactivate退出虛擬環境
刪除虛擬環境:rmvirtualenv 
安裝依賴包:pip  install -r requirements.txt
生成依賴包:pip freeze > requirements.txt
視圖
Flask基本程序的實現:
1、創建應用程序實例,參數__name__的主要作用是為了確定程序所在目錄
2、裝飾器路由的定義和使用,可以指定請求方法
動態路由參數:語法格式:<args>
正則URL:werkzeug的routing模塊實現路由訪問,優化訪問、限制訪問
重定向:當項目文件或目錄發生改變的時候,建議使用url_for()
redirect()和url_for()
redirect()接收的參數,是具體的URL
url_for()接收的視圖函數名
狀態碼:return 'string',自定義的狀態碼
自定義狀態碼,實現前後端的數據交互,不遵循HTTP協議定義的狀態碼
abort函數拋出的狀態碼必須符合HTTP協議
errorhandler()會接收abort函數拋出的狀態碼,一般用來處理錯誤頁面
狀態保持:HTTP協議的無狀態,cookie和session的具體描述
make_response()返回的對象可以實現cookie的設置和獲取
請求上下文:request和session
request的主要作用:獲取客户端和服務器交互過程中參數信息,form/data/files/args/get_json/headers
session:保存客户端和服務器交互過程中的用户信息
應用上下文:current_app和g
current_app會和程序運行一起存在,可以用來記錄日誌信息
g變量用來臨時存儲用户信息
請求鈎子:會在每次客户端和服務器交互前或以後執行
after_request:在每次請求後執行,用來實現前後端數據交互格式
裝飾器路由的實現:
Rule(構造具體的URL)
Map(保存不同的和URL和視圖函數的映射)
MapAdapter(實現具體的URL和視圖函數的綁定關係)
Flask_scripte:擴展命令行,以python 文件名.py runserver的形式啓動程序
自定義IP和端口,和migrate配合實現數據庫遷移
模板
模板的就是文件,渲染視圖函數返回的響應數據
變量 {{ 變量 }}
語句 
{% if  表達式 %}
{% endif  %}
過濾器:格式化輸出數據
{{ 數據 | 過濾器名稱}}
過濾器可以自定義
表單WTF:Flask_wt擴展,實現表單數據的驗證
密碼比較、數據是否存在、驗證郵箱、驗證字符串長度
使用表單驗證器,必須設置secret_key,驗證器要驗證數據,必須在表單中添加表單對象.csrf_token()
宏、繼承、包含:
micro:相當於python中的函數,一般用來實現模板頁面的動態功能
extends:相當於代碼替換,一般用來實現頁面中固定不變的部分,比如頂部菜單等
include:真正實現頁面的複用,一般用來實現重複頁面的功能
繼承的使用注意事項:
模板不支持多繼承,繼承的語句結束要指定結束的語句塊標記
Flask中的特殊變量和方法:在視圖和模板中都可以使用
request、url_for()、config、flash消息閃現
數據庫
Flask_sqlalchemy實現ORM抽象,不用面對具體的SQL語句
實現數據庫的連接:
app.config['SQLALCHEMY_DATABASE_URI']='mysql://root:mysql@localhost/dbs'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True追蹤數據庫的修改行為,如未設置不會報錯,會同時警告信息
創建數據庫實例:db = SQLALchemy()
定義模型類:
需要繼承自db.Model
定義字段需要使用db.Column()方法
backref反向引用實現一對多或多對一的查詢
基本的查詢語句:
get接收id值
filter_by(id=user_id).first()使用精確查詢,需要加上查詢執行器
filter模糊查詢,order_by排序
paginate分頁操作
in_/notin_/and/
數據庫遷移:Flask_migrate
python 文件名.py db init  創建遷移文件
python 文件名.py db migrate 創建遷移腳本
python 文件名.py db ungrade 更新數據表
python 文件名.py db downgrade 回退數據表
回退數據庫前建議使用history命令查看歷史版本號
Flask_mail:發送郵件
郵件服務器、端口、傳輸協議、郵箱名、授權碼
藍圖、測試、部署
藍圖:模塊化應用,主要用來實現不同文件中的視圖函數和路由之間的綁定
創建藍圖對象:api = Blueprint('api',__name__),第一個api是藍圖對象,第二個api是藍圖名稱;
使用藍圖路由
註冊藍圖路由到應用程序實例上
測試:驗證預期結果和實際結果之間的差距
單元測試:具體功能模塊的測試,單元測試的本質是assert斷言代碼
實現單元測試,需要繼承自unittest.casttest
單元測試代碼中,測試類,必須定義兩個方法:
setUP()實現測試前的準備工作,比如數據庫連接,創建程序實例、模擬客户端等
tearDown()實現測試後的掃尾工作,比如清楚會話對象、刪除測試數據等
測試代碼必須以test開頭
部署:gunicorn -w 開啓的進程數 -b 綁定的IP和PORT 啓動文件:應用程序實例名稱
反向代理:客户端並不知道訪問的是哪台服務器
正向代理:服務器並不知道是哪個客户端來訪問
Restful API
表現層狀態轉換
域名、版本、路徑、請求方法、過濾信息、響應數據、狀態碼、鏈接關聯資源、錯誤信息、數據的交互格式json、URL中不能出現動詞,名詞建議使用複數