You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

61 lines
1.3 KiB

from fastapi import APIRouter, FastAPI, Request
from starlette.middleware import Middleware
from starlette.middleware.base import BaseHTTPMiddleware
app = FastAPI()
@app.middleware("http")
async def app_middleware(request: Request, call_next):
print("App before")
response = await call_next(request)
print("App after")
return response
async def outer_middleware(request: Request, call_next):
print("Outer before")
response = await call_next(request)
print("Outer after")
return response
outer = APIRouter(
prefix="/outer",
middleware=[Middleware(BaseHTTPMiddleware, dispatch=outer_middleware)],
)
async def name_middleware(request: Request, call_next):
print(f"Hi {request.path_params.get('name')}!")
response = await call_next(request)
print(f"Bye {request.path_params.get('name')}!")
return response
inner = APIRouter(prefix="/inner")
@inner.get(
"/{name}",
middleware=[Middleware(BaseHTTPMiddleware, dispatch=name_middleware)],
)
async def hello(name: str):
print("Handler")
return {"message": f"Hello {name} from inner!"}
@outer.get("/")
async def outer_hello():
print("Handler")
return {"message": "Hello from outer!"}
@app.get("/")
async def app_hello():
print("Handler")
return {"message": "Hello from app!"}
outer.include_router(inner)
app.include_router(outer)