日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python flask 特殊装饰器 @app.before_request 和 @app.after_request 以及@app.errorhandler介绍

發布時間:2025/3/15 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python flask 特殊装饰器 @app.before_request 和 @app.after_request 以及@app.errorhandler介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

特殊裝飾器 @app.before_request 和 @app.after_request以及@app.errorhandler()

一、背景:

Flask我們已經學習很多基礎知識了,現在有一個問題

我們現在有一個 Flask 程序其中有3個路由和視圖函數,如下:

from flask import Flaskapp = 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個函數,如果成百上千個怎么整啊

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

其實這兩個特殊裝飾器就像是Django中的中間件一樣。

二、?@app.before_request? :在請求(request)之前做出響應

from flask import Flask from flask import request from flask import redirect from flask import sessionapp = Flask(__name__) # type:Flask app.secret_key = "DragonFire"@app.before_request def is_login():if request.path == "/login":return Noneif 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 極為相似或者說是一模一樣,只不過它只會被執行一次

三、@app.after_request? :在響應(response)之前做出響應

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

四、小結:

@app.before_request? 裝飾器的執行是自上而下;@app.after_request 裝飾器的執行是自下而上。例如:be1 - be2 - be3 - af3 - af2 - af1;

異常情況下的執行順序:be1 - af3 - af2 - af1

五、@app.errorhandler() :重定義錯誤頁面返回信息

比如:當404時則會執行下面的視圖函數@app.errorhandler(404) def error404(error_info): return 三劍客+小兒子

?

總結

以上是生活随笔為你收集整理的Python flask 特殊装饰器 @app.before_request 和 @app.after_request 以及@app.errorhandler介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。