如何在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
相关产品推荐
相关产品推荐

