如何使用django Ninja自定义验证错误?

esbemjvw  于 2023-08-08  发布在  Go
关注(0)|答案(1)|浏览(177)

@router.post("/addUser", response={200: responseStdr, 404: responseStdr,422: responseStdr})
def addUser(request, user: userRegister):
try:
return 200, {"status": 200,
"isError": "True",
"data": user,
"msg": "user crée avec succès",
"method": "POST"}
except :
return {"status": 201,
"isError": "True",
"data": "erreur format",
"msg": "erreur",
"method": "POST"}

字符串
我收到这个错误:

{
"detail": [
{
"loc": [
"body",
"user",
"last_name"
],
"msg": "field required",
"type": "value_error.missing"
}
]
}


当字段与预期格式不匹配时,如何发送自定义消息而不是此错误?

368yc8dk

368yc8dk1#

您可以添加自定义异常处理程序。在我的例子中,我必须为前端提供一个“错误”属性,但我也保留了细节。

@api.exception_handler(ValidationError)
def validation_errors(request, exc: ValidationError):
    error = "Validation failed"
    if exc.errors:
        try:
            loc = exc.errors[0]["loc"][-1]
            msg = exc.errors[0]["msg"]
            if loc == "__root__":
                loc = ""
            else:
                loc = f"{loc}: "
            error = f"{loc} {msg}"
        except Exception:
            logging.exception("Error handling validation error")
    return HttpResponse(
        json.dumps({"error": error, "detail": exc.errors}),
        status=400,
        content_type="application/json",
    )

字符串
你可以拿着这个,根据你的需要定制它。把它添加到你的路由器所在的任何地方(我的路由器在urls.py)。

相关问题