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))

 

posted @ 2019-02-28 17:00  Niuli'blog  阅读(1885)  评论(0编辑  收藏  举报