[БЕЗ_ЗВУКА]
Здравствуйте!
Сегодня мы познакомимся с валидатором Marshmallow.
В прошлом видео, как вы помните, мы познакомились с валидатором JSON Schema.
Поэтому мы будем использовать то, что осталось нам от прошлого валидатора.
Для начала мы проверим или установим,
кому как, наш валидатор.
У меня он уже установлен.
Поэтому продолжаем.
Итак, перво-наперво мы скопируем тот view,
который у нас остался от JSON Schema,
назовем его MarshView.
Итак.
Marshmallow очень похож на django forms.
То есть для того чтобы что-то свалидировать,
нужно нужно описать класс с данными, по которыми мы,
собственно, потом будем валидировать.
Итак, давайте, собственно, перейдем в schemas.py,
который у нас собственно уже есть наш JSON Schema.
Импортируем класс
Schema и
fields.
И мы пишем нашу схему,
которая будет называться ReviewSchema.
Наследуется, как нетрудно догадаться, от Schema.
Так, поля, которые будет проверять наша схема, описываются так же,
как в Django forms, в виде переменных класса.
Так как мы помним, у нас есть два поля: это
feedback и grade.
Grade является числом.
В Marshmallow
есть несколько простых валидаторов, в частности, есть валидатор длины,
то есть, что длина не короче и не длиннее определенного значения.
И есть валидатор числа, тоже по верхней и по нижней границе.
Есть также другие, но мы их в этом видео рассматривать не будем.
Итак, для того чтобы задействовать валидатор, нужно передать его
в скобках в параметре validate.
Итак, валидатор для числа называется Range.
Как помним, нижняя граница 1, а верхняя 100.
Валидатор для строки называется, как нетрудно догадаться, length.
И он от 3 до 10.
Итак, нам нужно еще их импортировать.
Поэтому мы добавляем соответствующую
строчку [БЕЗ_ЗВУКА]
в import.
Так, теперь вроде все тип-топ.
В нашем MarshView мы убираем то,
что осталось от JSON Schema.
Импортируем нашу новую ReviewSchema.
Как мы помним, называется ReviewSchema.
Инициализируем ее.
И передаем ей режим strict=True.
Этот режим заставит нашу схему при загрузке,
если схема заметит невалидные данные,
это заставит ее поднять исключение.
Итак, давайте загрузим
наш документ,
которого у нас нет, но мы его сейчас создадим.
[БЕЗ_ЗВУКА] Итак,
json.loads(request.body).
[БЕЗ_ЗВУКА]
[БЕЗ_ЗВУКА] Так.
Вроде бы все готово.
Теперь давайте зарегистрируем наш View в
urls, в MarshView.
Итак, вроде бы у нас все готово.
Давайте попробуем запустить сервер.
И, соответственно, отправим запрос.
Так, что-то пошло не так.
Давайте посмотрим что.
Да, вот буковка s у нас лишняя.
И обработчик у нас немножечко неправильный.
Мы забыли то, что ValidationError у нас идет из jsonschema,
у Marshmallow соответственно другое исключение,
которое называется точно так же.
Поэтому мы его импортируем.
marshmallow import.
ValidationError.
Так как у нас названия конфликтуют между этими двумя исключениями,
мы импортируем его под другим именем.
Скажем, под MarshmallowError.
Так.
И исправим здесь.
Так, вроде бы все.
Давайте попробуем еще раз.
Мы передали 420 в документе,
поэтому мы получили ошибку 400.
Ну давайте попробуем передать невалидный документ.
Берем отсюда 0.
Как видим, нам возвращается правильная ошибка.
А теперь давайте попробуем задействовать так называемый Happy Path,
то есть когда все так, как и должно быть.
Как видим, мы получаем 201-й ответ и наш документ обратно.
Итак, мы познакомились с вами в этом видео с библиотекой Marshmallow.
Она умеет гораздо больше, чем мы рассмотрели в этом видео, в частности,
может использоваться как сериализатор еще.
Но это, к сожалению, это не предмет этого видео,
поэтому это остается вам на самостоятельное изучение.
В следующем видео мы поговорим с вами о таких вещах,
как аутентификация и авторизация, зачем они нужны и как их,
собственно, реализовывать на Django.
[ЗВУК] [БЕЗ_ЗВУКА]