【发布时间】:2019-07-31 14:18:51
【问题描述】:
Context 正在创建一个简单的 python 代理来整理各种不同的指标,供 Prometheus 抓取。我正在使用中间件来更新值。 我遇到了两种定义 aiohttp 中间件的方式,两种方式都可以工作。我想更好地理解它们之间的区别,你也会推荐哪种方式(或者我还没有发现另一种方式!)
async def mw1(app, handler):
async def middleware_handler(request):
print('mw1 start')
response = await handler(request)
print('mw1 end')
return response
return middleware_handler
@web.middleware
async def mw2(request, handler):
print('mw2 start')
response = await handler(request)
print('mw2 end')
return response
app = web.Application(middlewares=[mw1, mw2])
这两个都被调用并按预期工作。但是我不太明白,为什么一个使用'app'作为参数而另一个使用'request'的意义。 在 mw2() 中,如果需要,我可以通过 request.app 访问“app”。在 mw1() 'request' 通过魔法出现在内部函数中......
只是想了解发生了什么。
【问题讨论】:
标签: python middleware aiohttp