Falsk
a、Flask是一個基於Python開發並且依賴jinja2模板和Werkzeug WSGI服務的一個微型框架,對於Werkzeug本質是Socket服務端,其用於接收http請求並對請求進行預處理,然後觸發Flask框架,開發人員基於Flask框架提供的功能對請求進行相應的處理,並傳回給使用者,如果要傳回給使用者複雜的內容時,需要藉助jinja2模板來實現對模板的處理,即:將模板和資料進行渲染,將渲染後的字串傳回給使用者瀏覽器
b、“微”(micro) 並不表示你需要把整個 Web 應用塞進單個 Python 檔案(雖然確實可以 ),也不意味著 Flask 在功能上有所欠缺。微框架中的“微”意味著 Flask 旨在保持核心簡單而易於擴充套件。Flask 不會替你做出太多決策——比如使用何種資料庫。而那些 Flask 所選擇的——比如使用何種模板引擎——則很容易替換。除此之外的一切都由可由你掌握。如此,Flask 可以與您珠聯璧合。
c、預設情況下,Flask 不包含資料庫抽象層、表單驗證,或是其它任何已有多種庫可以勝任的功能。然而,Flask 支援用擴充套件來給應用新增這些功能,如同是 Flask 本身實現的一樣。眾多的擴充套件提供了資料庫整合、表單驗證、上傳處理、各種各樣的開放認證技術等功能。Flask 也許是“微小”的,但它已準備好在需求繁雜的生產環境中投入使用。
二、安裝
a、安裝:pip3 install flask
三、虛擬環境
a、安裝: pip3 install virtualenv
b、# 建立虛擬環境 virtualenv env1
c、# 進入虛擬環境 Scripts/activate
d、 # 退出虛擬環境 Scripts/deactivate
四、flask框架
a、簡介:輕量級框架
Django:無socket、中介軟體、路由系統、檢視(CBV,FBV)、 模板、ORM、cookie、Session、Admin、Form、快取、訊號、序列化….
Flask:無socket、中介軟體(擴充套件)、路由系統、檢視(CBV)、第三方模板(jinja2)、cookie、Session弱爆了
b、 什麼是wsgi?
Web服務網管介面,協議。
c、Flask依賴一個實現了WSGI協議的模組:werkzeug
五、flask
a、 -依賴於wsgi模組:wsgiref,werkzeug,wsgi
b、 -實體化Flask物件
-靜態檔案字首 /xxx
-靜態檔案目錄
-模板路徑
c、 新增路由關係
-將 Rule(url和檢視函式)新增到Flask物件的url_map欄位中
-兩種新增路由的方式
d、request
-request.form
-request.args
六、基本使用
a、儲存session的資料存到了瀏覽器上,
- 優點:減輕了服務端的壓力
- 缺點:不安全
b、路由系統:
-
@app.route(‘/post/
‘) -
@app.route(‘/login’, methods=[‘GET’, ‘POST’])
-
@app.route(‘/user/
‘) -
@app.route(‘/post/
‘) -
@app.route(‘/post/
‘)
七、路由系統
a、 -可傳入引數
@app.route(‘/user/
@qpp.route(‘/post/
b、反向生成URL:url_for
c、擴充套件Flask的路由系統,讓它支援正則:
八、請求響應
a、在django中用make_safe而在Flask中用make_response
九、模板語言
a、模板的使用
Flask使用的是Jinja2模板,所以其語法和Django無差別
b、自定義模板方法
Flask中自定義模板方法的方式和Bottle相似,建立一個函式並透過引數的形式傳入render_template,
十、session
a、 -session是否還有其他方法?
-它與字典方法相同
b、 -session超時時間如何設定:
c、除請求物件之外,還有一個 session 物件。它允許你在不同請求間儲存特定使用者的資訊。它是在 Cookies 的基礎上實現的,並且對 Cookies 進行金鑰簽名要使用會話,你需要設定一個金鑰。
d、
-
設定:session[‘username’] = ‘xxx’
-
刪除:session.pop(‘username’, None)
十一、閃現(flash)
a、session從在在服務端的一個字典中,session儲存的資料取一次,它還是會有。而flash是基於session建立的,flash支援在裡面放值,只要在裡面取值它就會沒有。閃現就是
b、在session的基礎上,把它的值真實的放在session上,當去它的時候不僅把它的值取走,還把session的東西去掉。
十二、藍圖
a、藍圖用於為應用提供目錄劃分
-
藍圖URL字首:xxx = Blueprint(‘account’, __name__,url_prefix=’/xxx’)
-
藍圖子域名:xxx = Blueprint(‘account’, __name__,subdomain=’admin’)
# 前提需要給配置SERVER_NAME: app.config[‘SERVER_NAME’] = ‘wupeiqi.com:5000’
# 訪問時:admin.wupeiqi.com:5000/login.html
十三、DBUtils
a、DBUtils是Python的一個用於實現資料庫連線池的模組。
b、連線池的三種樣式:
(1)、第一種樣式:
它的缺點:每一次請求反覆建立資料庫的連結,連結的次數太多
(2)、第二種樣式:
它的缺點:不能支援併發
(3)、第三種樣式:
它是基於DBUtils實現資料庫連線池
-為每個執行緒建立一個連結,該執行緒關閉時,不是真正的關閉,本執行緒再次呼叫時,還是使用的最開始的建立的連結,知道執行緒終止,資料庫連結才關閉
-建立一個連線池(10個連結),為所有執行緒提供連結,使用時來進行獲取,使用完畢時,再次放回到連線池。
c、DBUtils的應用:
十四、session
a、 session和cookie的原理和區別:
cookie是儲存在瀏覽器上的鍵值對
session是存在服務端的鍵值對(服務端的session就是一個大字典,字典中是隨機字串)(session與request原理相同)(session原理跟背景關係也有關係)
session依賴於cookie存在
b、 session流程
十五、session原始碼解析
a、先執行Flask的__call__方法 ,呼叫出來wsgi_app,它先做request的背景關係做完,請求剛進來到push中,它先處理request將請求相關的資料,然後新增到了local中,
b、 緊接著處理session(將RequestContext物件(request,session)新增到local中),request(將request資訊封裝到Request(environ)物件並複製給requestContext 對 象),然後獲取cookie中的隨機字串,檢驗是否有,沒有就生成。根據隨機字串,獲取服務端session儲存的值。把session放到記憶體中,
c、 執行wsgi_app方法下麵的檢視函式。執行完檢視函式傳回到full_dispatch_requesthong ,觸發只執行一次的裝飾器中(觸發Flask訊號),
d、 執行完這個裝飾器,緊接著執行下麵的特殊的裝飾器,如果這些特殊裝飾器沒有傳回值,那麼rv=None,如果有傳回值,頁面時就顯示這個傳回值,
e、如果沒有傳回值,觸發執行那個檢視函式,拿傳回值。請求執行完傳回後,呼叫finalize_request,對它的傳回值進行封裝。
十六、Flask和Django的區別
a、請求相關的資料
-Django:引數
-Flask: 基於Local,LocalStark物件
b、 多個請求進來會不會混淆
-單執行緒
-多執行緒
-協程
解決: from greenlet import getcurrent as get_ident
十七、Flask訊號
a、 Flask框架中的訊號基於blinker
b、安裝: pip3 install blinker
c、十個訊號
d、flask訊號本生自己沒有,用的是別人的,並且這些訊號透過裝飾器全部可以代替了的,但是Django裡面有些特殊的
就是那些model操作根本沒有裝飾器,就是同過內建的訊號來完成的
十八、django內建的訊號
十九、Wtform
a、WTForms是一個支援多個web框架的form元件,主要用於對使用者請求資料進行驗證。
b、安裝: pip3 install wtform
c、用途:
1、使用者登入註冊
當使用者登入時候,需要對使用者提交的使用者名稱和密碼進行多種格式校驗。如:
使用者不能為空;使用者長度必須大於6;
密碼不能為空;密碼長度必須大於12;密碼必須包含 字母、數字、特殊字元等(自定義正則);
二十、SQLALchemy
a、介紹 :
SQLALchemy是一個基於Python實現的ORM框架。該框架是建立在DB API之上,使用關係物件對映進行資料庫操作
簡言之便就是:將類和物件轉換成SQL,然後使用資料API執行SQL並獲取執行的結果
b、安裝: pip3 install SQLALchemy
c、組成部分
d、SQLALcheam本省無法運算元據庫,其必須來pymysql等第三方外掛, Dialect用於資料API的交流,根據配置檔案的不同
呼叫不同的資料庫API,從而實現對資料庫的操作
作者:孟慶健
源自:https://www.cnblogs.com/mengqingjian/p/8452898.html