Flask——請求鉤子/狀態保持
阿新 • • 發佈:2018-11-10
請求鉤子
為什麼要有這個請求鉤子出現呢? 在客戶端和服務端的資料互動的過程中,有些準備工作或掃尾工作需要處理,比如 在請求開始時,建立資料庫連線; 在請求開始時,根據需求進行許可權校驗; 在請求結束時,指定資料的互動格式; 為了讓每個檢視函式避免編寫同樣的程式碼,Flask提供了通用設施的功能,即請求鉤子。 請求鉤子是通過裝飾器實現的,Flask支援如下四種請求鉤子: before_first_request(在處理第一個請求前執行) brdore_request(在每次請求前執行,如果在某修飾函式中返回了一個響應,檢視函式將不再被呼叫) after_request(如果沒有丟擲異常,在每次請求後執行;接受一個引數:檢視函式做出的響應(response);在此函式中可以對響應值在返回之前進行進一步的修改;需要將引數中的響應在此函式中返回) teardown_request(在每次請求後執行;接收一個引數:錯誤資訊(e)同errorhandler,如果有相關異常丟擲) 注意:這個異常是指程式碼本身錯誤(程式碼中出現10/0)不執行,如果abort丟擲異常了,after_request還是會執行。
狀態保持
因為http是一種無狀態的協議,基於套接字(socket),瀏覽器請求伺服器是無狀態的。無狀態:就是指一次使用者請求之後,瀏覽器伺服器無法知道這個使用者做過什麼,每次請求都是一次新的請求。但是,我們在實際的開發過程中,需要記錄使用者是否登陸過,以及瀏覽過那些商品之類的需求。
實現狀態保持有兩種方式:
在客戶端儲存資訊使用Cookie;
在伺服器端儲存資訊使用Session;
兩種都是基於鍵值對的字串,伺服器生成Cookie資訊,都儲存在瀏覽器當這個。而伺服器生成Session資訊,key儲存在瀏覽器中,value儲存在伺服器中。
Cookie設定和獲取:
from flask import Flask,make_response,request app = Flask(__name__) # Cookie有一個同源策略,百度給的京東拿不到。 # 設定Cookie @app.route('/') def index(): response = make_response('set cookie success') # 設定Cookie,設定有效期,單位是秒。 response.set_cookie('name','wax',max_age = 360) # 返回響應 return response # 在瀏覽器的set_cookie:name = wax,path = / 這個路徑path就是瀏覽器的這個cookie允許的域 # 獲取Cookie @app.route('/get') def get_cookie(): name = request.cookies.get('name') return name if __name__ == '__main__': app.run()
Session的設定和獲取
from flask import Flask,session app = Flask(__name__) # 設定金鑰 app.config['SECRET_KEY'] = 's9H/oDtK/s5gbddabV2aMjFb4AHrbNwR7nRl7y4WvDmZwDHdAFRsHw==' # 設定Session,設定session要求會話安全。需要設定一個金鑰。 @app.route('/') def set_session(): session['name'] = 'wax' return 'set session success' if __name__ == '__main__': app.run() 設定session的時候如何選擇一個合適的金鑰,如何去尋找這個合適的安全的字串呢,使用base64這個編碼工具: import os,base64 a = os.urandom(40) base64.b64encode(a)