Выбор ответа Junior FastAPI и Pydantic спрашивают часто обновлено

Зачем response_model

Вопрос

Обработчик возвращает ORM-объект пользователя с полем password_hash, а response_model=UserOut без этого поля. Что увидит клиент?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Только поля UserOut: лишнее отфильтруется. FastAPI прогоняет результат через модель ответа и отдаёт только её поля, поэтому responsemodel это и документация, и защита от утечек.

Варианты ответа

  1. Только поля UserOut: лишнее отфильтруетсяправильный ответ
  2. Все поля объекта, включая password_hash, раз их вернул обработчик
  3. Ошибку 500: лишнее поле не проходит валидацию модели
  4. Пустой объект {}, потому что ORM-объект не словарь

Разбор

FastAPI прогоняет результат через модель ответа и отдаёт только её поля, поэтому response_model это и документация, и защита от утечек. Чтобы прочитать ORM-объект по атрибутам, у модели должен быть from_attributes=True. Лишние атрибуты ошибку не вызывают, они просто не попадают в ответ.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.