Maison >développement back-end >Tutoriel Python >Comment personnaliser la réponse d'erreur de FastAPI pour des itinéraires spécifiques ?
Dans FastAPI, lors de la validation d'une requête, si un paramètre est manquant ou invalide, FastAPI déclenche une exception RequestValidationError. Par défaut, cette exception renvoie une réponse 422 Unprocessable Entity. Toutefois, vous souhaiterez peut-être personnaliser cette réponse pour des itinéraires spécifiques. Voici plusieurs approches pour y parvenir :
Remplacer le gestionnaire d'exceptions par défaut pour RequestValidationError et fournir une réponse personnalisée pour l'erreur souhaitée. itinéraires.
from fastapi import FastAPI, Request, status, HTTPException from fastapi.responses import JSONResponse from fastapi.encoders import jsonable_encoder from fastapi.exceptions import RequestValidationError app = FastAPI() routes_with_custom_exception = ['/'] @app.exception_handler(RequestValidationError) async def validation_exception_handler(request: Request, exc: RequestValidationError): if request.url.path in routes_with_custom_exception: return JSONResponse(content={'401': 'Unauthorized'}, status_code=401)
Créez une sous-application et montez-la sur l'application principale pour le des itinéraires spécifiques. Remplacez le gestionnaire d'exceptions pour RequestValidationError dans la sous-application.
from fastapi import FastAPI, RequestValidationError, HTTPException from fastapi.responses import JSONResponse app = FastAPI() subapi = FastAPI() @subapi.exception_handler(RequestValidationError) async def validation_exception_handler(request: Request, exc: RequestValidationError): return JSONResponse(content={'401': 'Unauthorized'}, status_code=401) app.mount('/sub', subapi)
Créez une sous-classe APIRoute personnalisée et remplacez-la. la méthode get_route_handler. Cela vous permet d'intercepter les requêtes et de gérer les exceptions RequestValidationError.
from fastapi import FastAPI from fastapi.routing import APIRoute from fastapi.responses import JSONResponse from fastapi.exceptions import RequestValidationError from fastapi.requests import Request class ValidationErrorHandlingRoute(APIRoute): def get_route_handler(self): original_route_handler = super().get_route_handler() async def custom_route_handler(request: Request): try: return await original_route_handler(request) except RequestValidationError as e: return JSONResponse(content={'401': 'Unauthorized'}, status_code=401) return custom_route_handler app = FastAPI() router = APIRouter(route_class=ValidationErrorHandlingRoute) @app.get('/') async def main(): return {'message': 'Hello from main API'} @router.get('/custom') async def custom_route(some_custom_header: str = Header(...)): return {'some-custom-header': some_custom_header} app.include_router(router)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!