You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在aiohttp服务器中实现可解析为列表的动态路径?

如何在aiohttp服务器中实现可解析为列表的动态路径?

嘿,我懂你现在的需求——你不想被固定数量的路径参数限制死,希望不管路径后面跟着多少个分段,都能把它们解析成一个列表返回,对吧?先看看你原来的代码问题:你现在写的路由/args/{a}/{b}/{c}只能精准匹配3个参数的情况,多一个少一个都会返回404,灵活性不够。

其实aiohttp支持通配符路由,可以用它来捕捉任意长度的路径后缀,然后我们自己把它拆分成列表就行。给你改一下代码:

from aiohttp import web

async def example(r):
    # 获取通配符匹配到的路径后缀
    path_suffix = r.match_info.get('tail')
    # 按斜杠拆分,得到参数列表
    args_list = path_suffix.split('/')
    # 返回格式化后的文本
    return web.Response(text=f'{args_list}')

app = web.Application()
# 用{tail:.+}来匹配任意长度的路径后缀,.+表示匹配任意字符(包括斜杠)
app.add_routes([web.get('/args/{tail:.+}', example)])

web.run_app(app)

现在测试一下:

  • 访问http://localhost:8080/args/A/B/C,你会得到['A', 'B', 'C'],和你原来的需求一致;
  • 要是访问http://localhost:8080/args/X/Y,会返回['X', 'Y'];
  • 甚至访问http://localhost:8080/args/foo/bar/baz/qux,也能得到['foo', 'bar', 'baz', 'qux']。

这里要注意{tail:.+}里的.+是正则表达式的一部分,它会匹配除了换行之外的任意字符(包括斜杠),这样就能把/args/后面的所有内容都捕捉到,再通过split('/')拆分成列表就搞定啦。

备注:内容来源于stack exchange,提问作者rzlvmp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 16:39:39