РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
188 of 307 menu

Параметр strict

Параметр strict применяется в моделях Pydantic, которые используются в FastAPI для валидации данных запроса и ответа. Он включает строгий режим проверки: значения не приводятся к нужному типу автоматически, а принимаются только те, что изначально соответствуют аннотации. Параметр можно задать в Field, в ConfigDict модели или в методе model_validate.

Синтаксис

Field(strict=True)
model_config = ConfigDict(strict=True)
Model.model_validate(data, strict=True)

Пример

Давайте создадим модель без строгого режима и посмотрим, как Pydantic приводит строку к числу:

from fastapi import FastAPI from pydantic import BaseModel app = FastAPI() class User(BaseModel): age: int @app.post('/user') def create_user(user: User): return {'age': user.age}

Отправим на адрес /user тело запроса с числом в виде строки:

{"age": "25"}

Результат выполнения кода:

{"age": 25}

Как видим, строка "25" была автоматически приведена к числу 25.

Пример

Давайте включим строгий режим через Field и повторим запрос:

from fastapi import FastAPI from pydantic import BaseModel, Field app = FastAPI() class User(BaseModel): age: int = Field(strict=True) @app.post('/user') def create_user(user: User): return {'age': user.age}

Отправим на адрес /user тело запроса с числом в виде строки:

{"age": "25"}

Результат выполнения кода:

{"detail": [{"type": "int_type", "loc": ["body", "age"], "msg": "Input should be a valid integer", "input": "25"}]}

Теперь FastAPI вернул ошибку 422, потому что строка не является числом.

Пример

Давайте включим строгий режим сразу для всей модели через ConfigDict:

from fastapi import FastAPI from pydantic import BaseModel, ConfigDict app = FastAPI() class User(BaseModel): model_config = ConfigDict(strict=True) age: int name: str @app.post('/user') def create_user(user: User): return user

Отправим на адрес /user корректное тело запроса:

{"age": 25, "name": "abcde"}

Результат выполнения кода:

{"age": 25, "name": "abcde"}

Если же передать возраст строкой, валидация снова завершится ошибкой.

Пример

Давайте включим строгий режим только на время вызова метода model_validate:

from pydantic import BaseModel class User(BaseModel): age: int name: str res = User.model_validate({'age': 25, 'name': 'abcde'}, strict=True) print(res)

Результат выполнения кода:

age=25 name='abcde'

Смотрите также

  • параметр populate_by_name,
    который разрешает заполнение полей по имени атрибута
  • параметр frozen,
    который делает экземпляры модели неизменяемыми
  • метод model_validate,
    который валидирует данные и создаёт экземпляр модели
  • класс ConfigDict,
    который задаёт настройки модели, включая strict
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить