Heim > Artikel > Backend-Entwicklung > Wie kann ich die Fehlerreaktion von FastAPI für bestimmte Routen anpassen?
Wenn in FastAPI bei der Validierung einer Anfrage ein Parameter fehlt oder ungültig ist, FastAPI löst eine RequestValidationError-Ausnahme aus. Standardmäßig gibt diese Ausnahme eine 422 Unprocessable Entity-Antwort zurück. Möglicherweise möchten Sie diese Reaktion jedoch für bestimmte Routen anpassen. Hier sind mehrere Ansätze, um dies zu erreichen:
Überschreiben Sie den Standard-Ausnahmehandler für RequestValidationError und stellen Sie eine benutzerdefinierte Antwort für das Gewünschte bereit Routen.
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)
Erstellen Sie eine Unteranwendung und mounten Sie sie in der Haupt-App für bestimmte Routen. Überschreiben Sie den Ausnahmehandler für RequestValidationError in der Unteranwendung.
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)
Erstellen Sie eine benutzerdefinierte APIRoute-Unterklasse und überschreiben Sie sie die get_route_handler-Methode. Dadurch können Sie Anfragen abfangen und RequestValidationError-Ausnahmen behandeln.
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)
Das obige ist der detaillierte Inhalt vonWie kann ich die Fehlerreaktion von FastAPI für bestimmte Routen anpassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!