Валидация схемы JSON в Python с помощью marshmallow

Marshmallow — это пакет Python, который может сериализовать, десериализовать и валидировать данные JSON.

Он полезен для веб-сервисов при обработке входящих JSON-данных и ответов в формате JSON.

Установка

python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install marshmallow
Вход в полноэкранный режим Выход из полноэкранного режима

Примеры

Простой пример

Этот пример демонстрирует следующие возможности:

  • Валидация и десериализация с помощью Schema.load().
  • Предварительная обработка входных данных с помощью @post_load.
from marshmallow import Schema, fields, validate, post_load


class Person(Schema):
    name = fields.Str(required=True)
    gender = fields.Str(required=True, validate=validate.OneOf({"male", "female", "other"}))
    email = fields.Email(required=True)
    registration_datetime = fields.DateTime("%Y-%m-%dT%H:%M:%S%z")

    @post_load
    def convert_to_utc_datetime(self, data, **kwargs):
        data["registration_datetime"] = data["registration_datetime"].astimezone(datetime.timezone.utc)
        return data

person_schema = Person()
Вход в полноэкранный режим Выход из полноэкранного режима
>>> person_data = {"name": "Tommy", "gender": "male", "email": "tommy@example.com", "registration_datetime": "2022-07-06T08:00:00+08:00"}
>>> person_schema.load(person_data)

{'gender': 'male',
 'name': 'Tommy',
 'registration_datetime': datetime.datetime(2022, 7, 6, 0, 0, tzinfo=datetime.timezone.utc),
 'email': 'tommy@example.com'}
Вход в полноэкранный режим Выход из полноэкранного режима
>>> invalid_person_data = {"name": "Tommy", "gender": "mmale", "email": "tommy@example.com", "registration_datetime": "2022-07-06T08:00:00+08:00"}
>>> person_schema.load(invalid_person_data)

ValidationError: {'gender': ['Must be one of: female, other, male.']}
Войти в полноэкранный режим Выход из полноэкранного режима

Оцените статью
devanswers.ru
Добавить комментарий