Flask入门篇(六)请求钩子和上下文管理

本文深入探讨了Flask框架的应用上下文和请求上下文管理,包括request、session、current_app、g对象的使用,以及如何通过装饰器实现请求钩子功能,如before_first_request、before_request、after_request和teardown_request。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

from flask import Flask, request, redirect, url_for, g, session, make_response


app = Flask(__name__)
app.config["SECRET_KEY"] = "asd44sSADdsaasdlj87"


"""
上下文管理
解析1:在flask中请求上下文对象有request、session,应用上下文对象有current_app和g
解析2:g在处理请求时,用于临时存储的对象,特别注意每次新请求都会重置这个对象
"""
@app.route("/login")
def login():
    print("login run")
    # a = 1 / 0  # 主动抛出异常
    uid = request.form.get("uid")
    pwd = request.form.get("pwd")
    if uid == "zhangsan" and pwd == "123456":
        g.uid = uid
        save_uid()
        url = url_for("index")
        return redirect(url)
    return "登陆失败!"
def save_uid():
    print("g.uid=%s" % g.uid)
@app.route("/index")
def index():
    print("index run")
    response = make_response("欢迎进入首页!")
    session["id"] = "145812"
    response.set_cookie("name", "zhangsan")
    return response

"""
请求钩子
解析1:类似于中间件的概念,也可以简单理解为做某件事前做的准备或者善后
解析2:执行的优先顺序handle_first_request -> handle_before_request -> 
handle_after_request -> handle_teardown_request
解析3:执行的次数:handle_first_request:0-1
               handle_before_request:0-n
               handle_after_request:0-n
               handle_teardown_request:0-n
"""
# 在程序第一次请求之前被执行
@app.before_first_request
def handle_first_request():
    print("handle_first_request run")
# 在每一次请求之前被执行
@app.before_request
def handle_before_request():
    print("handle_before_request run")
# 在每一次请求之后没有抛出异常被执行
@app.after_request
def handle_after_request(response):  # 这里的response来自请求之后返回给前端的信息
    print("handle_after_request run")
    return response
# 在每一次请求之后不管有没有异常都会被执行
@app.teardown_request
def handle_teardown_request(response):  # 这里的response来自请求之后或者after_request返回给前端的信息
    print("handle_teardown_request run")
    return response


if __name__ == '__main__':
    app.run()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值