aiohttp:如何将 sub_app 添加到 sub_app?

aiohttp: how to add sub_app to sub_app?

我需要将 sub_app 添加到 sub_app。这是我的代码

app = web.Application()

subapp = web.Application()
subapp.router.add_get('/page1/', handler)
app.add_subapp('/wt/', subapp)

subsubapp = web.Application()
subsubapp.router.add_get('/page2/', handler)
subapp.add_subapp('/sub/', subsubapp)

为什么找不到页面 /wt/sub/page2/? 我认为 subsubapp 的路径是 /wt/ (sub_app) 和 /sub/ (subsubapp) 的串联。我错了吗?规则是什么?

此致, 瓦列里。

aiohttp 2.3 版有一个细微的错误:它不会通知不正确的子应用程序初始化顺序。

子应用逻辑上是frozen在parent注册后,添加新的路由是错误的。

尚未发布 aiohttp 3.0 在 app.add_subapp() 调用时引发显式异常,有关详细信息,请参阅相应的 issue and pull request

修复您的片段重新排序路由注册调用:

from aiohttp import web

async def handler(request):
    return web.Response(text="OK")

subsubapp = web.Application()
subsubapp.router.add_get('/page2/', handler)

subapp = web.Application()
subapp.router.add_get('/page1/', handler)
subapp.add_subapp('/sub/', subsubapp)

app = web.Application()
app.add_subapp('/wt/', subapp)

web.run_app(app, host='127.0.0.1', port=8080)

获取 http://127.0.0.1:8080/wt/sub/page2/ 资源后 returns 200 OK.