Middleware runs before and after every request for cross-cutting concerns.
1from fastapi import FastAPI, Request2from fastapi.middleware.cors import CORSMiddleware3import time45app = FastAPI()67# Built-in CORS middleware8app.add_middleware(9 CORSMiddleware,10 allow_origins=["http://localhost:3000"],11 allow_credentials=True,12 allow_methods=["*"],13 allow_headers=["*"],14)1516# Custom middleware17@app.middleware("http")18async def timing_middleware(request: Request, call_next):19 start_time = time.time()2021 # Before request22 print(f"Request: {request.method} {request.url.path}")2324 response = await call_next(request)2526 # After request27 process_time = time.time() - start_time28 response.headers["X-Process-Time"] = str(process_time)29 return response3031# Class-based middleware32class LogMiddleware:33 def __init__(self, app):34 self.app = app3536 async def __call__(self, scope, receive, send):37 print(f"Request: {scope['path']}")38 await self.app(scope, receive, send)3940app.add_middleware(LogMiddleware)
Common uses: