Атрибут detail
Атрибут detail принадлежит классу HTTPException
и хранит текст или структуру, описывающую ошибку.
Именно это значение FastAPI подставляет в поле detail
JSON-ответа и отдаёт клиенту вместе с кодом status_code.
Значением может быть строка, словарь или список - всё,
что сериализуется в JSON.
Синтаксис
from fastapi import HTTPException
exc = HTTPException(status_code=..., detail=...)
exc.detail
Пример
Давайте выбросим исключение с текстовым описанием и посмотрим на ответ сервера:
from fastapi import FastAPI, HTTPException
app = FastAPI()
@app.get('/user/{name}')
def user(name: str):
if name != 'abcde':
raise HTTPException(
status_code=404,
detail='user not found'
)
return {'name': name}
Результат выполнения кода для адреса /user/xyz:
{"detail": "user not found"}
Пример
В качестве значения detail можно передать словарь
с дополнительными полями:
from fastapi import FastAPI, HTTPException
app = FastAPI()
@app.get('/article/{id}')
def article(id: int):
if id != 1:
raise HTTPException(
status_code=404,
detail={
'message': 'article not found',
'id': id
}
)
return {'id': id, 'title': 'hello'}
Результат выполнения кода для адреса /article/5:
{"detail": {"message": "article not found", "id": 5}}
Пример
Атрибут detail можно прочитать у самого объекта исключения:
from fastapi import HTTPException
exc = HTTPException(status_code=400, detail='bad request')
res = exc.detail
print(res)
Результат выполнения кода:
"bad request"
Смотрите также
-
класс
HTTPException,
который выбрасывает HTTP-ошибку с нужным кодом -
атрибут
status_code,
который задаёт код состояния ответа -
атрибут
headers,
который добавляет заголовки в ответ с ошибкой -
класс
RequestValidationError,
который возникает при ошибке валидации данных