Aiohttp маршрутизация (aiohttp.web.RouteTableDef)

1

У меня проблемы с RouteTableDef.
Существует некоторый проект, в котором структура маршрутизации выглядит так:

1) Имеется файл route.py.
routes.py

from aiohttp import web
routes = web.RouteTableDef()

2) В разных файлах есть несколько обработчиков, например: handler1.py

from aiohttp import web
from routes import routes

@routes.get('/get')
async def handle(request):
    name = request.match_info.get('name', "Anonymous")
    text = "Hello, " + name
    return web.Response(text=text)

и так далее.
3) и основной файл, где выполняется приложение:

from aiohttp import web
from routes import routes

if __name__ == '__main__':
    app = web.Application()
    app.router.add_routes(routes)

    web.run_app(app, host='localhost', port=8877)

Идея такова:
все маршруты хранятся в переменной routes, когда мы хотим создать нового обработчика, мы импортируем эту переменную из routes.py и используем ее.
Чтобы регистрировать маршруты в приложении, мы импортируем routes из routes routes.py.
И как заставить его работать с aiohttp v3.3.2?

Проблема в том, что она работает с aiohttp version 2.3.10.
Но есть реальный проект с таким способом маршрутизации, и он работает.
Как создать одно место, которое будет хранить маршруты?
Я полагаю, что проблема в версии lib, потому что этот проект не работает с последней версией aiohttp.

Теги:
aiohttp

3 ответа

1
Лучший ответ

Импорт обработчик запроса handle к файлу, где web.Application создает и работает. Импортируйте его перед импортом routes с routes.py

1

Проблема здесь заключается в порядке импорта, как уже было сказано. Это одна из причин, по которой я создаю по одному web.RouteTableDef() в каждом файле, а затем web.RouteTableDef() их вместе для app.router:

from .dashboard import routes as dashboard_routes
from .posts import routes as posts_routes

app.router.add_routes([
    *dashboard_routes,
    *posts_routes,
])
-1

Общий ответ работает, но разве не немного избыточно импортировать обработчики, когда они вообще не используются?

Зачем использовать декораторы, когда вам все еще нужно импортировать все обработчики?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню