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()
Flask入门篇(六)请求钩子和上下文管理
最新推荐文章于 2024-05-30 18:20:00 发布