before_request after_request


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 除了 Login 函數之外的所有函數里面全校驗 session 是否登錄了

太麻煩了,現在咱們只有3個函數,如果成百上千個怎么整啊

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

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

 

1.@app.before_request 在請求(request)之前做出響應

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 也是一個裝飾器,他所裝飾的函數,都會在請求進入視圖函數之前執行

request.path 是來讀取當前的url地址如果是 /login 就允許直接通過 return None 你可以理解成通過放行

校驗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

很少應用,但是要了解有這么個東西

 

 
 
0
0
 
 
 
« 上一篇: Flask最強攻略 - 跟DragonFire學Flask - 第七篇 Flask 中路由系統
» 下一篇: Python人工智能之路 - 第四篇 : jieba gensim 最好別分家之最簡單的相似度實現


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM