>  기사  >  백엔드 개발  >  특정 경로에 대한 FastAPI\의 오류 응답을 사용자 정의하는 방법은 무엇입니까?

특정 경로에 대한 FastAPI\의 오류 응답을 사용자 정의하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-20 00:35:02654검색

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

FastAPI의 특정 경로에 대한 오류 응답 사용자 정의

FastAPI에서 요청을 확인할 때 매개변수가 누락되거나 유효하지 않은 경우, FastAPI는 RequestValidationError 예외를 발생시킵니다. 기본적으로 이 예외는 422 Unprocessable Entity 응답을 반환합니다. 그러나 특정 경로에 대해 이 응답을 사용자 정의할 수 있습니다. 이를 달성하기 위한 몇 가지 접근 방식은 다음과 같습니다.

옵션 1: 기본 예외 처리기 재정의

RequestValidationError에 대한 기본 예외 처리기를 재정의하고 원하는 항목에 대한 사용자 지정 응답을 제공합니다. 경로.

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)

옵션 2: 하위 애플리케이션 사용

하위 애플리케이션을 생성하고 해당 애플리케이션을 기본 앱에 마운트합니다. 특정 경로. 하위 애플리케이션에서 RequestValidationError에 대한 예외 처리기를 재정의합니다.

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)

옵션 3: 사용자 정의 APIRouter 및 APIRoute 사용

사용자 정의 APIRoute 하위 클래스를 생성하고 재정의합니다. get_route_handler 메소드. 이를 통해 요청을 가로채고 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)

위 내용은 특정 경로에 대한 FastAPI\의 오류 응답을 사용자 정의하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.