Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich die Fehlerreaktion von FastAPI für bestimmte Routen anpassen?

Wie kann ich die Fehlerreaktion von FastAPI für bestimmte Routen anpassen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-20 00:35:02656Durchsuche

How to Customize FastAPI's Error Response for Specific Routes?

Fehlerantwort für bestimmte Route in FastAPI 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:

Option 1: Standard-Ausnahmehandler überschreiben

Ü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)

Option 2: Unteranwendung(en) verwenden

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)

Option 3: Benutzerdefinierten APIRouter und APIRoute verwenden

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn