Flask之钩子函数
类似django的中间件,作用就是在进入框架的之后 http方法之前或返回response之前进行一些操作 Flask的钩子函数可在注册时根据注册的app或者蓝图从而确定钩子函数作用的范围(可全局 也可作用某一个蓝图)
方法:
一共四种方方法
before_first_request()
执行时间:在处理第一个请求前运行 before_request之前
格式:
@App.before_app_first_request
def before_app_first_request():
pass
参数:
没有参数
返回值:
None 请求继续
response对象 终止本次请求 直接返回结果
before_request()
执行时间:每次请求都执行 http方法之前
格式:
@App.before_app_request
def before_app_request():
pass
参数:
没有参数
返回值:
None 请求继续
response对象
after_request()
执行时间:如果没有未处理的异常抛出,在每次请求后运行(http方法之后执行)
格式:
@App.after_request
def after_request(response):
pass
return response
参数:
视图方法中返回的response对象
返回值:
response对象 可在返回前修改
teardown_request()
执行时间:在每次请求后运行,即使有未处理的异常抛出也执行
格式:
@App.teardown_request
def teardown_request(response):
pass
return response
参数:
exception错误信息
返回值:
None
示例:
仿照Django中的中间件
第一步
应用目录下创建middlewares包目录,每个功能实现以个中间件(每个功能是一个py文件)
第二步
在middlewares目录下创建中间件文件
from flask import request
from flask import session
from flask import g
#参数:蓝图对象
def verifycodeMiddleware(blueprint):
@blueprint.before_app_request
def before():
print("------验证验证码-------")
第三步
注册中间件(蓝图文件中)
# 注册中间件
from myApp.middlewares import verifycodeMiddleware
verifycodeMiddleware(myApp)
扩展:
from flask import request
from flask import session
from flask import g
#参数:蓝图对象
def verifycodeMiddleware(app):
@app.before_request
def before():
print("****验证验证码****")
app.py -》注册 verifycodeMiddleware(app)
说明
# 钩子函数
@myApp.before_app_first_request
def first():
print("-------------first")
@myApp.before_app_request
def before():
print("-------------before")
# 验证验证
# 获取前端发送的验证码
# 获取session中的验证码
# 判断两者是否相同,相同返回None,否则重定向会登陆界面
# 验证是否登录
# 获取状态保持相关信息(账号)
# 如果没有状态保持说明没有登陆,重定向登陆界面
# 根据状态保持的账号获取用户对象
# 获取客户端发送的cookie中的键为token的值
# 如果没有说明没有登陆,重定向登陆界面
# 判断用户中的token与cookie中的token值是否相同,不相同则重定向登陆界面
@myApp.after_app_request
def after(response):
print("-------------after")
return response
@myApp.teardown_app_request
def teardown(exception):
print("-------------teardown")
print(exception)
信息来源:sunck