拦截器

简介

基于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)]"}