aiohttp: Вложенные пути RouteTableDef
Как сделать префиксы путям в RouteTableDef, чтобы не дублировать общие части URL? Во Flask для этих целей есть flask.Blueprint, в Django django.urls.include, а как быть в aiohttp?
Хотелось бы такой код:
from aiohttp import web
routes = web.RouteTableDef()
@routes.get('/api/info')
async def get_info(request):
...
@routes.get('/api/obj')
async def get_obj(request):
...
app = web.Application()
app.add_routes(routes)
Превратить во что-то такое:
from aiohttp import web
routes = web.RouteTableDef()
routes_api = web.RouteTableDef()
routes.append(routes_api, prefix='/api')
@routes_api.get('/info')
async def get_info(request):
...
@routes_api.get('/obj')
async def get_obj(request):
...
app = web.Application()
app.add_routes(routes)
Чтобы можно было вынести описание части путей в отдельный файл.
Ответы (1 шт):
Автор решения: AivanF.
→ Ссылка
В aiohttp нет вложенных путей или префиксов для них, но для этих же целей есть вложенные приложения с префиксами. Получается такой код:
from aiohttp import web
routes_api = web.RouteTableDef()
@routes_api.get('/info')
async def get_info(request):
...
@routes_api.get('/obj')
async def get_obj(request):
...
app_api = web.Application()
app_api.add_routes(routes_api)
app = web.Application()
app.add_subapp('/api', app_api)
Это позволяет легко вынести под-приложения в отдельные файлы. Более подробно см. документацию: Web Advanced: Nested Applications