Метод model_validate
Метод model_validate применяется к классу модели,
унаследованному от BaseModel.
Первым параметром передаётся словарь или объект для проверки.
Метод возвращает новый экземпляр модели с проверенными
и преобразованными данными. Если данные не соответствуют
схеме, возбуждается исключение ValidationError.
Метод удобен, когда нужно создать модель из уже готового
словаря, например, полученного из JSON или из базы данных.
В отличие от конструктора модели, model_validate
выполняет полную проверку типов и ограничений полей.
Синтаксис
Model.model_validate(obj)
Пример
Давайте создадим модель User и проверим словарь
через model_validate:
from pydantic import BaseModel
class User(BaseModel):
name: str
age: int
data = {'name': 'abcde', 'age': 25}
res = User.model_validate(data)
print(res)
Результат выполнения кода:
name='abcde' age=25
Пример
Давайте передадим в model_validate данные
с неверным типом и получим ошибку валидации:
from pydantic import BaseModel, ValidationError
class User(BaseModel):
name: str
age: int
data = {'name': 'abcde', 'age': 'not a number'}
try:
res = User.model_validate(data)
except ValidationError as e:
print(e)
Результат выполнения кода:
1 validation error for User
age
Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='not a number', input_type=str]
Пример
Давайте используем model_validate внутри
обработчика FastAPI для проверки тела запроса:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class User(BaseModel):
name: str
age: int
@app.post('/user')
def create_user(data: dict):
user = User.model_validate(data)
return {'name': user.name, 'age': user.age}
Результат выполнения кода для тела {"name": "abcde", "age": 25}:
{"name": "abcde", "age": 25}
Смотрите также
-
класс
BaseModel,
от которого наследуются все модели Pydantic -
метод
model_validate_json,
который проверяет JSON-строку и создаёт модель -
метод
model_dump,
который преобразует модель в словарь -
метод
model_dump_json,
который преобразует модель в JSON-строку