Flask最強攻略 - 跟DragonFire學Flask - 第十篇 before_request after_request

Flask咱們已經學習不少基礎知識了,如今有一個問題flask

咱們如今有一個 Flask 程序其中有3個路由和視圖函數,以下:小程序

from flask import Flask

app = Flask(__name__)  # type:Flask


@app.route("/login")
def login():
    return "Login"

@app.route("/index")
def index():
    return "Index"

@app.route("/home")
def home():
    return "Login"

app.run("0.0.0.0", 5000)
簡單的小程序

若是登錄了,就能夠訪問 index 和 home 頁面,若是沒登陸就跳轉到 login 登陸session

要怎麼解決呢, session 對, 用 session 除了 Login 函數以外的全部函數裏面全校驗 session 是否登陸了app

太麻煩了,如今我們只有3個函數,若是成百上千個怎麼整啊ide

裝飾器,對沒錯,裝飾器是一個很好的方案,可是啊,我如今仍是成敗上千個函數,我要在每個函數定義的時候加上@裝飾器,仍是很麻煩函數

那麼就引出了咱們要學習的第一個知識點:學習

 

1.@app.before_request 在請求(request)進入視圖函數以前執行url

from flask import Flask
from flask import request
from flask import redirect
from flask import session

app = Flask(__name__)  # type:Flask
app.secret_key = "DragonFire"


@app.before_request
def is_login():
    if request.path == "/login":
        return None

    if not session.get("user"):
        return redirect("/login")


@app.route("/login")
def login():
    return "Login"


@app.route("/index")
def index():
    return "Index"


@app.route("/home")
def home():
    return "Login"


app.run("0.0.0.0", 5000)
解決全部問題

@app.before_request 也是一個裝飾器,他所裝飾的函數,都會在請求進入視圖函數以前執行spa

request.path 是來讀取當前的url地址若是是 /login 就容許直接經過 return None 你能夠理解成經過放行3d

校驗session中是否有user 若是沒有的話,證實沒有登陸,因此絕不留情的 redirect("/login") 跳轉登陸頁面

還有一個要提的 @app.before_first_request 它與 @app.before_request 極爲類似或者說是如出一轍,只不過它只會被執行一次

 

2. @app.after_request 在響應(response)返回客戶端以前執行 , 結束視圖函數以後

@app.after_request
def foot_log(environ):
    if request.path != "/login":
        print("有客人訪問了",request.path)
    return environ

不多應用,可是要了解有這麼個東西

相關文章
相關標籤/搜索