In FastAPI können Sie durch Auslösen eines RequestValidationError eine benutzerdefinierte Fehlerantwort senden. Dies ist nützlich für Endpunkte, die die Erfüllung bestimmter Bedingungen erfordern, z. B. eines erforderlichen Headers.
Mit dieser Option können Sie den Standard-Ausnahmehandler für überschreiben RequestValidationError, mit dem Sie die Fehlerantwort anpassen können.
from fastapi import FastAPI, Request, Header, status from fastapi.exceptions import RequestValidationError from fastapi.responses import JSONResponse 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) return JSONResponse( status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, content=jsonable_encoder({'detail': exc.errors(), 'body': exc.body}), )
Durch das Erstellen einer Unteranwendung können Sie eine separate API-Instanz mit einem eigenen Ausnahmehandler erstellen. Dadurch können Sie die Fehlerbehandlung speziell für die Unteranwendung anpassen.
from fastapi import FastAPI from fastapi.exceptions import RequestValidationError from fastapi.responses import JSONResponse app = FastAPI() subapi = FastAPI() @subapi.exception_handler(RequestValidationError) async def validation_exception_handler(exc: RequestValidationError): return JSONResponse(content={'401': 'Unauthorized'}, status_code=401) @subapi.get('/') async def subapi_route(some_custom_header: str = Header(...)): return {'some-custom-header': some_custom_header} app.mount('/sub', subapi)
Mit dieser Methode können Sie das Verhalten einer bestimmten Route ändern durch die Verwendung einer benutzerdefinierten APIRoute-Klasse.
from fastapi import FastAPI, APIRouter, Response, Request, Header, HTTPException from fastapi.exceptions import RequestValidationError class ValidationErrorHandlingRoute(APIRoute): def get_route_handler(self) -> Callable: original_route_handler = super().get_route_handler() async def custom_route_handler(request: Request) -> Response: try: return await original_route_handler(request) except RequestValidationError as e: raise HTTPException(status_code=401, detail='401 Unauthorized') return custom_route_handler app = FastAPI() router = APIRouter(route_class=ValidationErrorHandlingRoute) @router.get('/custom') async def custom_route(some_custom_header: str = Header(...)): return {'some-custom-header': some_custom_header} app.include_router(router)
Option 1 ist wann einfach zu implementieren Sie müssen die Fehlerreaktion nur für bestimmte Routen anpassen. Option 2 eignet sich, wenn Sie mehr Kontrolle über den Teilbereich Ihrer API wünschen, beispielsweise die Anwendung verschiedener Sicherheitsrichtlinien oder die Ausnahmebehandlung. Option 3 gibt Ihnen mehr Kontrolle über einzelne Routen und ist nützlich für die Bearbeitung spezifischer Fälle innerhalb einer Route.
Das obige ist der detaillierte Inhalt vonWie kann ich Fehlerantworten für bestimmte FastAPI-Routen anpassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!