gpt4 book ai didi

python - aiohttp 中间件和更新请求的 url

转载 作者:行者123 更新时间:2023-12-05 07:32:52 25 4
gpt4 key购买 nike

我正在寻求有关我正在使用的 aiohttp 中间件的帮助,如果它丢失,它会自动将尾部斜杠添加到 uri。 Aiohttp 要求在定义 url 时,为路由列表中的每个路径定义两个路由,一个带有尾部斜杠,一个没有。他们有一个示例中间件,通过查找 uri 是否不以 / 结尾并添加它来解决这个问题,但随后他们使用 http 302 重定向告诉客户端转到新的 uri .否则,像 /endpoint 这样的相对 uri 将返回 404,而 /endpoint/ 将起作用。

这是他们的中间件:
https://github.com/aio-libs/aiohttp/blob/master/aiohttp/web_middlewares.py

使用他们的中间件作为基础,我试图完成同样的事情,但没有在客户端重定向。我希望处理仅在服务器上。我目前对此的尝试如下所示,似乎正在更新请求,但我仍然收到 404:

from aiohttp.web_urldispatcher import SystemRoute

def middleware(f):
f.__middleware_version__ = 1
return f

def trailing_slashes():
@middleware
async def impl(request, handler):
if isinstance(request.match_info.route, SystemRoute):
rel_url = str(request.rel_url)
if '?' in rel_url:
path, query = rel_url.split('?', 1)
query = f'?{query}'
else:
path = rel_url
query = ''
if not path.endswith('/'):
rel_url = f'{path}/{query}'
request = request.clone(rel_url=rel_url)

return await handler(request)

return impl

这是一个实现中间件并说明问题的类。

from aiohttp import web
import slashes_mw

class ClassName(object):
def __init__(self):
self.app = web.Application(middlewares=[slashes_mw.trailing_slashes()])
self.app.add_routes(self.get_routes())
web.run_app(self.app, port=80, host='0.0.0.0')

def get_routes(self):
return [
web.get('/', self.handler),
web.get('/{name}/', self.handler)
]

def handler(self, request):
return web.Response(text='hello')

ClassName()

有什么想法吗?感谢您的帮助。

最佳答案

我认为他们提出的重定向方法是非常正确的,因为路由根本不一样。但是您也可以尝试只注册路线的第二个“版本”:

def get_routes(self):
return [
web.get('/', self.handler),
web.get('/{name}/', self.handler),
web.get('/{name}', self.handler)
]

这应该可以解决您的服务器端问题(未测试)。

据我了解该框架,您的方法不起作用,因为在调用不同的中间件之前选择了特定的处理程序。如果您在中间件中调用处理程序函数,则不再进行“路由”查找。或者至少我是这样理解他们的文档的:https://docs.aiohttp.org/en/stable/web_advanced.html#middlewares

可能也很有趣:https://docs.aiohttp.org/en/stable/web_quickstart.html#variable-resources

关于python - aiohttp 中间件和更新请求的 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50960913/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com