藍圖 一 請求勾子 1 before_first_request 在處理第一個請求前執行 2 before_request 在每次請求前執行 如果在某裝飾的函數中返回了一個響應,視圖函數將不再被調用 3 after_request 如果沒有拋出錯誤,在每次請求後執行 接受一個參數:視圖函數做出的響應 ...
藍圖
一 請求勾子
1 before_first_request
- 在處理第一個請求前執行
2 before_request
- 在每次請求前執行
- 如果在某裝飾的函數中返回了一個響應,視圖函數將不再被調用
3 after_request
- 如果沒有拋出錯誤,在每次請求後執行
- 接受一個參數:視圖函數做出的響應
- 在此函數中可以對響應值在返回之前做最後一步修改處理
- 需要將參數中的響應在此參數中進行返回
4 teardown_request
- 在每次請求後執行
- 接受一個參數:錯誤信息,如果有相關錯誤拋出
請求勾子代碼測試
app = Flask(__name__)
# 在第一次請求前調用,可以在此方法內部做一些初始化操作
@app.before_first_request
def before_first_request():
print("before_first_request")
# 在每一次請求之前調用,這時候已經有請求了,可以在這個方法裡面做請求的校驗
@app.before_request
def before_request():
print("before_request")
# 在執行完視圖函數之後會調用,並且會吧視圖函數所生成的響應傳入,可以在此方法中對響應最最後一步統一的處理
@app.after_request
def after_request(response):
print("after_request")
reponse.headers["Content-Type"] = "application/json"
return response
# 在每一次請求之後都會調用,會接收一個參數,參數是伺服器出現的錯誤信息
@app.teardown_request
def teardown_request(e):
print("teardown_request")
@app.route('/')
def index():
return 'index'
if __name__ == '__main__':
app.run(debug=Ture)
二 狀態保持
1 Cookie
(1) 設置cookie
from flask import Flask, make_response
@app.route('/cookie')
def set_cookie():
resp = make_response('set cookie')
# 名稱 內容 過期時間
resp.set_cookie('username', 'chenjunming', max_age=3600)
return resp
(2) 獲取cookie
from flask import Flask, request
@app.route('/request')
def resp_cookie():
resp = request.cookies.get('username')
return resp
2 Session
session數據的獲取
app.secret_key = 'chenjunming' # 設置secret_key
@app.route('/index1')
def index1():
session['username'] = 'chen'
return redirect(url_for('index')) # 重定向到index
@app.route('/')
def index():
return session.get('username')
三 藍圖
1 創建一個藍圖對象(最好放在一個單獨的包里)
admin = Blueprint('admin', __name__)
2 在這個藍圖對象上進行操作(註冊路由,指定靜態文件夾,註冊模版過濾器)(最好放在單獨的包里)
@admin.route('/')
def admin_home():
return 'admin_home'
3 在應用對象上註冊這個藍圖對象
app.register_blueprint(admin, url_prefix='/admin')