Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Menyesuaikan Respons Ralat untuk Permintaan Tidak Sah dalam FastAPI?
Dalam aplikasi FastAPI, pengendalian ralat adalah penting untuk memberikan respons bermaklumat kepada pelanggan. Satu isu biasa yang dihadapi ialah menerima ralat 422 Entiti Tidak Dapat Diproses apabila menghantar data tambahan atau tidak sah dalam permintaan. Artikel ini akan menunjukkan cara menyesuaikan respons ralat untuk mengendalikan senario sedemikian.
Pertimbangkan contoh bahagian belakang FastAPI berikut:
from fastapi import FastAPI app = FastAPI class Demo(BaseModel): content: str = None @app.post("/demo") async def demoFunc(d: Demo): return d.content
Setelah menghantar permintaan dengan data tambahan, seperti data = { "content": "some text here"}aaaa, API mengembalikan ralat 422 dengan respons berikut:
{ "detail": [ { "loc": [ "body", 47 ], "msg": "Extra data: line 4 column 2 (char 47)", "type": "value_error.jsondecode", "ctx": { "msg": "Extra data", "doc": "{\n \"content\": \"some text here\"}aaaaa", "pos": 47, "lineno": 4, "colno": 2 } } ] }
Untuk menyesuaikan respons ralat, FastAPI membenarkan untuk mengatasi pengendali pengecualian pengesahan permintaan. Mulakan dengan mengimport modul yang diperlukan dan mentakrifkan fungsi pengendali pengecualian tersuai:
from fastapi import FastAPI, Body, Request, status from fastapi.encoders import jsonable_encoder from fastapi.exceptions import RequestValidationError from fastapi.responses import JSONResponse app = FastAPI() @app.exception_handler(RequestValidationError) async def validation_exception_handler(request: Request, exc: RequestValidationError): return JSONResponse( status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, content=jsonable_encoder({ "detail": exc.errors(), "body": exc.body, "custom msg": { "Your error message" } }), )
Fungsi ini memintas pengecualian RequestValidationError dan menjana respons JSON tersuai. Anda boleh memasukkan butiran ralat, isi permintaan dan sebarang mesej tersuai.
Sebagai contoh, menggunakan badan JSON yang tidak sah kini akan menghasilkan respons yang serupa dengan:
{ "detail": [ { "loc": ["body", 1], "msg": "invalid json", "type": "json.decoder.JSONDecodeError", "ctx": {} } ], "body": {}, "custom msg": { "Your error message" } }
Sebagai alternatif, anda boleh mengembalikan respons teks biasa dengan hanya mesej ralat:
from fastapi.responses import PlainTextResponse @app.exception_handler(RequestValidationError) async def validation_exception_handler(request, exc): return PlainTextResponse(str(exc), status_code=422)
Dengan menyesuaikan gelagat tindak balas ralat dalam FastAPI, anda boleh menyediakan pengendalian ralat yang lebih bermaklumat dan konsisten untuk API anda. Ini meningkatkan pengalaman pengguna dan memudahkan penyahpepijatan untuk kedua-dua pembangun dan pengguna API.
Atas ialah kandungan terperinci Bagaimana untuk Menyesuaikan Respons Ralat untuk Permintaan Tidak Sah dalam FastAPI?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!