Перейти к основному содержимому

middleware

Middleware

И Lihil, и Route имеют API add_middleware, который принимает один или последовательность MiddlewareFactory.

MiddlewareFactory — это вызываемый объект, который получает один позиционный аргумент типа ASGIApp и возвращает ASGIApp. Например:

# Этот фрагмент кода только для демонстрации.

def tracingmw_factory(next_app: ASGIApp) -> ASGIApp:
async def tracemw(scope, receive, send):
scope["trace_id"] = str(uuid.uuid4())
await next_app(scope, receive, send)
return trace_mw

lhl = Lihil(middlewares=[lambda app: tracingmw_factory(app)])

lihil использует starlette внутри, вы можете напрямую импортировать middleware из starlette, например:

from starlette.middleware.cors import CORSSMiddleware

lhl = Lihil(middlewares=[lambda app: CORSMiddleware(app, add_methods="*")])

для сложных middleware, которые требуют много внешних зависимостей, вы можете конструировать их внутри lifespan, чтобы вы могли использовать lhl.graph для разрешения зависимостей.