拦截器
简介
基于aiohttp的middleware能力,可以设置全局的拦截器,就能在endpoint处理请求的前后执行一些统一的操作,例如获取数据库连接等。
设置拦截器
使用bridge对象的add_middleware()
方法,可以注册一个全局的拦截器,拦截器的执行顺序就是注册拦截器的先后顺序。
示例:
from lessweb import get_mapping, rest_response, Bridge
async def hook_a(handler):
resp = await handler()
return rest_response({'a': '[%s]' % resp['data']['a']})
async def hook_b(handler):
resp = await handler()
return rest_response({'a': '(%s)' % resp['data']['a']})
@get_mapping('/info')
async def controller(*, a: str):
return {'a': a}
if __name__ == '__main__':
bridge = Bridge()
bridge.add_middleware(hook_a)
bridge.add_middleware(hook_b)
bridge.add_route(controller)
bridge.run_app()
请求: curl "http://localhost:8080/info?a=A"
返回: {"a":"[(A)]"}