Можно ли изменить сообщения об ошибках pydanti c в fastAPI? - PullRequest
0 голосов
/ 18 февраля 2020

В среде FastAPI сообщения об ошибках pydanti c отображаются следующим образом.

{"detail": [
{
    "loc": [
        "body",
        "location",
        "name"
    ],
    "msg": "field required",
    "type": "value_error.missing"
},
{
    "loc": [
        "body",
        "location",
        "name12"
    ],
    "msg": "extra fields not permitted",
    "type": "value_error.extra"
}
]
}

Я хочу отправить простое сообщение: {"field-name":"error message"}.

В документе Pydanti c, о котором они упоминали, создайте экземпляр модели в блоке try: исключения и создайте сообщение об ошибке в блоке исключения. Но в быстром API, например, экземпляр модели, созданный самим fastapi, если я напишу URL, как показано ниже

@router.post("/", response_model=DataModelOut)
async def create_location(location: schemas.LocationIn, user: str = Depends(get_current_user) ):
return model.save(location,user)

Здесь проблема с местоположением, созданным самим fastapi.

Есть ли способ создать сообщение об ошибке?

1 Ответ

0 голосов
/ 18 февраля 2020

Я пишу промежуточную посуду для него.

async def genrange(s):
    import json
    s = json.loads(s)
    yield json.dumps({"message":{k.get("loc")[-1]:k.get("msg") for k in s['detail']},
        "id":None})

@app.middleware("http")
async def add_process_time_header(request: Request, call_next):
    response = await call_next(request)
    status_code = response.status_code
    if status_code >=300:
        async for i in response.body_iterator:
            data = genrange(i)
        response.body_iterator = data
    return response
...