1.@app.before_request 在請求(request)以前作出響應javascript
@app.before_request 也是一個裝飾器,他所裝飾的函數,都會在請求進入視圖函數以前執行html
2.@app.after_request 在響應(response)以前作出響應java
實例
from flask import Flask,render_template,session,jsonify,request,redirect,send_file app = Flask(__name__) app.secret_key = "$%^Y&U*I*(&*" # 在請求進入視圖函數以前 作出響應,只執行一次 @app.before_first_request def bfe(): print("111111111") # return send_file("settings.py") # 在請求進入視圖函數以前 作出響應 @app.before_request def be1(): print("be1") if request.path == "/login": return None if not session.get("user"): return redirect("/login") return None @app.before_request def be2(): print("be2") return None @app.before_request def be3(): print("be3") return None # 在視圖函數處理以後 響應返回客戶端以前 @app.after_request def af1(res): print("af1") return res @app.after_request def af2(res): print("af2") return res @app.after_request def af3(res): print("af3") return res @app.route("/") def index(): print("如今進入視圖函數了") return jsonify({"name":1}) @app.route("/login",methods=["GET","POST"]) def login(): if request.method == "POST": session["user"] = request.form.get("username") return redirect("/") return render_template("login.html") @app.errorhandler(404) def error404(arg): print(arg) return redirect("https://www.autohome.com.cn/beijing/asdfgasdfasdf") if __name__ == '__main__': app.run() #直接啓動訪問根路徑的打印結果: # 111111111 be1 af3 af2 af1 be1 be2 be3 af3 af2 af1 # (11111111只被打印一次就沒了) # 訪問login: # 正常狀況:be1 - be2 - be3 - views - af3 - af2 - af1 # 返回順序是定義代碼時的倒敘 # 異常狀況:be1 - af3 - af2 - af1 # 異常阻塞請求的狀況
request.path 是來讀取當前的url地址若是是 /login 就容許直接經過 return None 你能夠理解成經過放行git
校驗session中是否有user 若是沒有的話,證實沒有登陸,因此絕不留情的 redirect("/login") 跳轉登陸頁面json
還有一個要提的 @app.before_first_request 它與 @app.before_request 極爲類似或者說是如出一轍,只不過它只會被執行一次flask