Flask 中的 特殊装饰器before_request/after_request
before_request :在请求收到之前绑定一个函数做一些事情。
after_request: 每一个请求之后绑定一个函数,如果请求没有异常。
teardown_request: 每一个请求之后绑定一个函数,即使遇到了异常。
@app.before_request 在请求进入视图函数之前做出响应 @app.after_request 在请求结束视图函数之后 - 响应返回客户端之前 @app.before_request def be1(): return None @app.after_request def af1(res): return res 正常执行顺序: be1 - be2 - be3 - views - af3 - af2 - af1 异常执行顺序:be1 - af3 - af2 - af1 @app.errorhandler(404) 重定义错误提示 def error404(args) args:错误信息
使用before_request来做权限和用户检查
因为使用restful方式,因此每次用户访问都会上传带入auth_key,如jwt等,因此可在@app.before_request中做权限的检查。
@app.app.before_request
def before_request():
#可在此处检查jwt等auth_key是否合法,
#abort(401)
#然后根据endpoint,检查此api是否有权限,需要自行处理
#print(["endpoint",connexion.request.url_rule.endpoint])
#abort(401)
#也可做ip检查,以阻挡受限制的ip等
这样,可对权限做集中管理
在最路由之前添加before_request,打印请求参数可以起到“拦截器”的作用
# @app.before_request 等同下面的 application.before_request @application.before_request def print_request_info(): print("请求地址:" + str(request.path)) print("请求方法:" + str(request.method)) print("---请求headers--start--") print(str(request.headers).rstrip()) print("---请求headers--end----") print("GET参数:" + str(request.args)) print("POST参数:" + str(request.form))