FastAPI में, एक RequestValidationError बढ़ाने से आप एक कस्टम त्रुटि प्रतिक्रिया भेज सकते हैं। यह उन अंतिम बिंदुओं के लिए उपयोगी है जिनके लिए विशिष्ट शर्तों को पूरा करना आवश्यक है, जैसे कि आवश्यक हेडर।
यह विकल्प आपको डिफ़ॉल्ट अपवाद हैंडलर को ओवरराइड करने की अनुमति देता है RequestValidationError, आपको त्रुटि प्रतिक्रिया को अनुकूलित करने की अनुमति देता है।
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}), )
एक उप-एप्लिकेशन बनाने से आप अपने स्वयं के अपवाद हैंडलर के साथ एक अलग एपीआई इंस्टेंस बना सकते हैं। यह आपको विशेष रूप से उप-एप्लिकेशन के लिए त्रुटि प्रबंधन को अनुकूलित करने की अनुमति देता है।
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)
यह विधि आपको कस्टम APIRoute क्लास का उपयोग करके एक विशिष्ट मार्ग के व्यवहार को बदलने की अनुमति देती है।
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)
विकल्प 1 को लागू करना आसान है जब आपको केवल विशिष्ट मार्गों के लिए त्रुटि प्रतिक्रिया को अनुकूलित करने की आवश्यकता होती है। विकल्प 2 तब उपयुक्त है जब आप अपने एपीआई के उप-क्षेत्र पर अधिक नियंत्रण चाहते हैं, जैसे विभिन्न सुरक्षा नीतियों को लागू करना या अपवाद प्रबंधन। विकल्प 3 आपको अलग-अलग मार्गों पर अधिक नियंत्रण देता है और एक मार्ग के भीतर विशिष्ट मामलों को संभालने के लिए उपयोगी है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3