简单说下最近使用flask钩子函数遇到的问题

flask中的钩子函数

before_request, after_request钩子函数

  • 关于这两个函数,一直贯穿请求的整个流程
  • before_request是在请求进来时,还没有进入主体接口函数,一般可以用来做一些鉴权的操作
  • after_request是接口函数返回后(包括了返回的response,因此这个钩子函数必须要返回一个结果给wsgi),可以针对请求的回应加入一些额外的结果

最近有碰到一个问题,由于鉴权是另外一个装饰器,使用在了具体的接口上,对于接口的返回,必须要判断是否有管理员权限才给返回正确的,否则需要返回一个401错误(前端已经定义401跳转操作)

1
2
3
4
5
6
7
8
9
@app.after_request
def after_request_callback(res):
if request.method != 'OPTIONS':
if g.user.is_ops:
return res
else:
return Response('', 401)
else:
return res

teardown_request

在after_request后才开始调用
主要对于请求完成后的一些关闭资源的操作,例如关闭db.session的操作都可以放在这里面

1
2
3
4
5
6
7
8
@app.teardown_request
def teardown_request(exception=None):
try:
db.session.remove()
except:
pass

return app

flask中的response对象

有的时候需要在接口返回的response对象中获取到具体的信息,需要使用get_data方法来获取
如果需要针对当前的response对象加入一些信息,可以使用set_data方法
set_cookie(key, value)定义cookie中的一些内容