Выбор ответа Junior FastAPI и Pydantic спрашивают часто обновлено
Зачем response_model
Вопрос
Обработчик возвращает ORM-объект пользователя с полем password_hash, а response_model=UserOut без этого поля. Что увидит клиент?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Только поля UserOut: лишнее отфильтруется. FastAPI прогоняет результат через модель ответа и отдаёт только её поля, поэтому responsemodel это и документация, и защита от утечек.
Варианты ответа
- Только поля
UserOut: лишнее отфильтруетсяправильный ответ - Все поля объекта, включая
password_hash, раз их вернул обработчик - Ошибку 500: лишнее поле не проходит валидацию модели
- Пустой объект
{}, потому что ORM-объект не словарь
Разбор
FastAPI прогоняет результат через модель ответа и отдаёт только её поля, поэтому response_model это и документация, и защита от утечек. Чтобы прочитать ORM-объект по атрибутам, у модели должен быть from_attributes=True. Лишние атрибуты ошибку не вызывают, они просто не попадают в ответ.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «FastAPI и Pydantic»
- Откуда в FastAPI ответ 422
- Annotated в параметрах FastAPI
- BackgroundTasks или очередь задач
- httpx.AsyncClient на каждый запрос
- Разбор и проверка query-параметров
- Граф зависимостей с кешем на запрос
- Подмена зависимостей в тестах
- Сколько раз вызывается зависимость