Flask请求扩展与g对象

请求扩展

1 before_request

任意一次请求来了,都会执行这个装饰器装饰的函数(与Django中process_request类似)

@app.before_request
def before_request():
print('请求来了')

2 after_request

任意一次请求走了,就会执行这个装饰器装饰的函数(与Django中process_response类似)

@app.after_request
def after_request(response):
print('请求走了')
return response

3 before_first_request(Flask新版本已去除)

在第一次请求时


teardown_request

每一个请求之后绑定一个函数,即使遇到了异常。
一般用来记录日志
不能做统一异常处理

@app.teardown_request
def teardown_request(e):
# 通过判断e是否为空,记录日志
print(e) # 出了异常,e就是异常对象,如果没有异常,e就是None
print('来了老弟')
if e:
return '出异常了'

4 errorhandler

监听http响应码:只要响应码对应,就会执行对应的函数
路径不存在时404,服务器内部错误500

@app.errorhandler(404)
def error_404(error):
print('----',error)
return render_template('404.html')
@app.errorhandler(500)
def error_500(error):
print('----',error)
return render_template('500.html')

5 template_global全局标签

# template_global 全局标签,所有页面都可以用
@app.template_global()
def add(a1, a2):
return a1 + a2

5 template_filter全局过滤器

# template_filter 全局过滤器
@app.template_filter()
def db(a1, a2, a3):
print(a1)
return a1 + a2 + a3

g对象

作用

g对象是 global 全局的意思。每次发送请求,这个g会一直存在,可以设置值和取值
g本质是为了避免request对象放值导致的数据污染问题,以后都用g放入值和使用


使用

# 导入
from flask import Flask, g
app = Flask(__name__)
app.secret_key = 'asdfasdf'
@app.before_request
def before():
# jwt认证---》认证通过--》request.user=当前登录用户
# g.user=当前登录用户
request.methods='张三'
g.name = '张三' # 放入了
@app.after_request
def after(response):
print('----', g.name)
return response
def showName():
print('showName', g.name)
@app.route('/', methods=['GET'])
def index():
# 取出g中得值
print(g.name)
showName()
return '欢迎你'
if __name__ == '__main__':
app.run()
posted @   wellplayed  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示