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
для разрешения зависимостей.