Следующее важное языковое будущее, о котором мы будем говорить, - это внешняя библиотека для создания
классы, сопоставляя их с представленными данными,
выполнение преобразований и валидаций, а также правильных сообщений об ошибках,
все такое прочее. Но я хочу начать с рассмотрения жесткого
кстати, как бы мы могли это сделать без этой библиотеки,
потому что на него легко смотреть
и сказать: "Ну, это вроде как коротко и просто",
но если вы видите, что это на самом деле делает для нас,
ну, а потом вдруг все становится супер потрясающе.
Итак, давайте проведем очень быстрое исследование создания какого-то класса, который это делает
валидация не самым простым способом,
но вполне естественно, как вы могли бы ожидать. Поэтому я собираюсь создать вещь под названием "модели" и в
здесь я поставлю "orders_v1"
и идея заключается в том, что мы получаем какие-то данные, представленные нам.
Обычно это сообщение или какое-то тело JSON, отправленное в наш API
в терминах FastAPI,
но то, что я собираюсь вам показать, на самом деле применимо только в общих чертах. Так что вы можете использовать его
как бы то ни было, и когда бы вы ни пожелали.
Итак, то, что у меня есть здесь, - это некоторые типичные данные, у них есть порядок,
нем есть элемент заказа, дата создания,
нем есть несколько страниц, которые были посещены,
например, если я хочу сделать какое-то отслеживание,
как будто они впервые увидели эти страницы,
тогда они решили купить эту вещь.
Может быть, я смогу оптимизировать свою воронку. А вот и цена
в долларах и центах.
Что я хочу сделать, так это создать класс под названием "Порядок",
- да? И я хочу определить какой-то инициализатор
там, где я могу взять идентификатор элемента, я могу взять созданную дату,
страницы и цена. Теперь у PyCharm есть эта классная штука, где он действительно добавит
эти поля для нас, если я только попрошу. Так что я
просто собираюсь выбить это очень быстро.
Вот и мы. Ну, разве это хорошо?
Может быть. Я не знаю.
Мы хотим, чтобы созданная дата была датой и временем,
верно? Так что, может быть, даже мы хотим уточнить, что,
например, это "datetime. datetime" , а посещенные страницы будут
список целых чисел, теоретически, импортирует это. Цена проста,
это просто поплавок. И идентификатор элемента будет int. Сейчас,
Я знаю, что ты смотришь сверху и говоришь: "это струна", я знаю, я хотел
это должно быть int. Но помните,
Интернет часто представляет вещи в виде строк, таких как строки запросов и так далее.
И я не хочу заботиться о том, как он будет представлен.
Я хочу, чтобы это было целое число.
Так что это выглядит хорошо, не так ли?
Мы можем спуститься сюда и просто сделать переопределение скажем так,
str и мы просто вернем строку self
дот Дандер диктует. Так что это не красиво,
но это покажет нам, какие данные у нас есть.
Так что давайте пойдем и действительно попробуем создать это.
Я собираюсь создать заказ, и я должен передать ценности,
верно? Если я этого не сделаю, это будет похоже на пропущенные значения,
Он сейчас разобьется. И я собираюсь сделать классный трюк, где я могу взять
словарь и поставить перед ним двойную звезду,
и то, что мы собираемся сделать, это сопоставить ключи с аргументами ключевых слов.
Так что это то же самое высказывание "O равно порядку, скажем, идентификатора элемента
равно того, в JSON точка Вам товар запятая
получите дату посещения страниц запятыми".
Да, так здорово. Давайте сделаем это.
А потом давайте просто напечатаем строковое представление.
Распечатайте О. Посмотрим, что получится. Запустите это.
Круто. Итак, смотрите, идентификатор элемента - это
123, сотворенные дни, прекрасно, страницы.
- Подожди минутку. - Подожди минутку. - Подожди минутку. - Подожди минутку.
Это ведь должно быть целое число, верно?
Предполагается, что это анализируемая дата-время.
Это должно быть
список целых чисел. Это в основном так, но не на 100%.
Посмотри-ка на эту. Поэтому мы должны были преобразовать это число.
Хорошо. И у нас вроде как есть что-то вроде представительства,
но мы могли бы сделать лучше. Так что позвольте мне бросить что-то, что действительно делает это
вот. Потому что как вы увидите,
это не очень весело
писать. Мы можем спуститься вниз и пройти сквозь это чудовище.
Итак, что я хочу сделать, так это добавить очень быстро
требование. Мы будем использовать "python dash
dateutil " вот так, и он не написан с ошибкой.
И давайте просто установим это, потому что это будет действительно хороший способ разбора
эта строка, чтобы мы могли вытащить это из
dateutil. Хорошо, хорошо,
это, конечно, выглядит более сложным. Что у нас тут происходит?
Итак, наш товар поступает, а мы его не передаем.
Значение по умолчанию для посещенных страниц.
Потому что если мы передадим неизменяемый тип,
это может измениться. Это похоже на большую странность в Python.
Итак, мы делаем этот трюк, а затем еще и,
мы преобразуем это в идентификатор элемента,
но мы не хотим какой-то странности, не можем преобразовать целое число.
Нам нужно иметь как бы правильное сообщение об ошибке.
Идентификатор элемента не может быть преобразован в целое число,
поэтому мы делаем попытку, кроме ValueError, вызвать другое исключение,
Может быть, это тоже может быть ValueError,
но, право, дело не в этом.
Мы должны проделать приличный объем работы, чтобы правильно разобрать это или
остановка. созданную дату мы еще раз разберем.
Вот поплавок. Мы убедимся, что это поплавок, а потом проверим вот это,
для посещенных страниц мы будем повторять каждую из них и фактически преобразовывать каждую отдельную
к целому числу. Если ни один из,
есть один, который похож на какое-то значение, которое не может быть целым числом,
он сейчас рухнет,я его подниму.
Может быть, ты тоже хочешь иметь равных.
Поэтому мы сделаем это, проверив тип, а затем сравнив словари.
Но если у вас есть равные, вам нужны не равные,
вероятно, нам следует добавить хэш,
что я даже не потрудился сделать
неужели он все еще работает? Давай попробуем.
Эй, ты только посмотри. Это действительно работает
отличный. Так что обратите внимание. Теперь это целое число, теперь это
дата-время, как и следовало ожидать. Теперь это список реальных целых чисел, а не
смесь целых чисел и строк или что-то в этом роде.
Так что да, это работает фантастически,
но посмотри, какой он корявый.
Тпру. Мы думали, что там было что-то вроде,
хорошая, простая вещь. Нет,
нет, нет, нет, нет,
нет, не так быстро. Не в реальном мире.
Не в реальном мире. Итак, то, что я собираюсь показать вам, - это то, что позволяет
нас есть еще проще, чем это,
и все же это классное подтверждение того, что это круто, потому что это работает, и нам не нужно
напиши, ладно? Так вот в чем мотивация.
Мол, нам нужно что-то такое, что займет своего рода полуформу,
полукорректированные данные и сделайте все преобразования за нас,
как будто мы здесь, внизу. И все же мы не хотим, Вы знаете,
пусть он получит эти странные ошибки.
Так что мы будем делать все это вручную,
верно? Было бы идеально просто не делать этого.
Но это, вероятно, то, что мы действительно должны
напишите, если мы собираемся попытаться передать эти произвольные данные JSON в это
прикажите и ждите, что он оживет.