ITDEAL
1.11K subscribers
749 photos
108 videos
11 files
572 links
Разработка комплексных IT решений для бизнеса и частных заказчиков.

Чат: @pybytes_chat

Founder: @lunasantrope
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
14
Typing | Модуль аннотации (часть 1)

🙂 Разбирая валидацию данных с Pydantic, я упомянул аннотации типов. Они позволяют указать желаемый тип переменной в помощь разработчикам и IDE. Однако в Python для этого есть целый встроенный модуль typing, который очень хорошо работает вместе с Pydantic.

👀 Этот модуль позволяет расширить наши аннотации, с помощью него можно создавать пользовательские типы данных, использовать специальные типы и много другое. Однако я еще раз напоминаю, что в самом Python это никак не влияет на исполнение кода, это всего лишь подсказка.

🔤 Первое, что можно сделать вместе с typing, это указакать желаемые типы данных, к примеру, в словаре. Dict[str, int] — такая конструкция говорит, что ключи в словаре должны быть строкой, а значения числом.

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
3
Валидация данных в Python (часть 4)

🙂 Сериализация (serialization) — процесс преобразования объектов в удобный для хранения и передачи формат. В Pydantic, конечно же, для этого все предусмотрено. Основные методы для конвератции модели и ее полей это model_dump() и model_dump_json().

👀 Оба метода очень похожи, однако первый просто конвертирует модель и подмодели в обычный словарь, а второй возвращает строку в формате JSON. Также у методов есть немало полезных аргументов, к примеру, с помощью include и exclude можно указать какие поля стоит оставить или исключить.

🔤 Если нам недостаточно обычной конвертации, то мы можем создать собственную сериализацию. Для этого есть два декоратора: @field_serializer и @model_serializer. Первый используется, чтобы настроить сериализацию конкретных полей, а второй — всей модели.

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Typing | Модуль аннотации (часть 2)

🚶‍♀️ Сегодня мы разберем довольно полезные функции встроенного модуля typing: TypeVar и Annotated. На работу чистого Python кода функции никак не влияют, однако, к примеру, Pydantic умеет с этим работать и распознавать новые типы.

🔤 TypeVar — это класс, который используется для создания обобщённых типов (generics) в функциях и классах. Он позволяет создавать шаблоны, которые могут работать с различными типами данных. Также одним из полезных параметров ялявется bound, который может ограничить типы, которые могут быть присвоены обобщённому типу.

🔤 Annotated — это специальная функция, которая используется для добавления метаданных к аннотациям типов. Если типы, созданные с помощью TypeVar, обычно распознаются IDE, то метаданные созданы для внешних библиотек и инструментов.

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
3
Валидация данных в Python (заключительная часть)

🥱 И наконец нельзя не рассказать про допольнительный модуль Pydantic — Pydantic Settings. Этот модуль позволяет загружать настройки или классы конфигурации из переменных среды или секретных файлов. Модуль очень мощный и широко применяется популярными библиотеками, к примеру, FastAPI.

🔤 Чтобы его установить, нужно воспользоватся следующей командой: pip install pydantic-settings. Потом нужно создать новую модель, но этот раз она должа наследоваться от BaseSettings. Функционал такой же как и у BaseModel, однако инициализатор попытается прочитать все поля, которые не были переданы в качестве аргументов из переменных среды.

👀 Это может быть полезно для сохранения конфиденциальности и в принципе это упрощает работу с окружением. Также с помощью SettingsConfigDict можно устанавливать некоторые настройки, к примеру, указать, что переменные должны быть считаны из специального .env файла.

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21
This media is not supported in your browser
VIEW IN TELEGRAM
**Основано на реальных событиях**

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍3
Вся суть фронтенда 🙄

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
3
Шаблоны проектирования (часть 3)

🥱 Шаблон «Стратегия» (Strategy) — поведенческий паттерн (behavioral pattern), который предлагает определить семейство алгоритмов, поместить каждый в отдельный класс и сделать их объекты взаимозаменяемыми.

👀 Представим, что в коде есть всего один класс, отвечающий за навигацию. Каждый раз, когда вы хотите добавить новый вид построения маршрута, (автомобильный, пешеходный и т.д.), вам приходится этот класс изменять, что не очень удобно и может испортить уже работающий код.

😎 «Стратегия» предлагает выделить все алгоритмы маршрутов в отдельные классы — стратегии, а в изначальном классе навигации — контексте, создать поле для хранения ссылки на один из алгоритмов. Контекст не выбирает алгоритм, он просто делегирует работу связанному объекту стратегии.

📌 Этот паттерн используется довольно часто, он соблюдает принцип OCP и значительно повышает гибкость кода. Однако, если у вас немного алгоритмов, использовать паттерн смысла нет — он просто раздует код, к тому же многие языки программирования позволяют сделать все тоже самое без дополнительных классов.

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Зачем беспокоится?

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
3
Углубляемся в ООП (часть 1)

🙂 Все знают про четыре столпа ООП: инкапсуляция, наследование, полиморфизм и абстракция. Понимание и правильное применение этих принципов поможет сделать код куда лучше. Однако на этом концепции не заканчиваются, еще одной важной концепцией является ассоциация.

👀 Ассоциация — это слабый тип отношений между классами, который устанавливается через их объекты. Каждый объект независим, и между собой эти объекты могут взамодействовать. Просто представьте отношения между учеником и учителем.

📌 Также бывает три вида ассоциации:

🔤 one-to-one — каждому объекту одного класс соответствует один объект другого.
🔤 one-to-many — один объект одного класса может быть связан с несколькими объектами другого.
🔤 many-to-many — несколько объектов одного класса могут быть связаны с несколькими объектами другого класса.

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
3
Углубляемся в ООП (часть 2)

😎 Агрегация — это форма ассоциации, в которой все объекты опять же имеют отдельные жизненные циклы, однако один объект принадлежит другому. Это отношения «целое/часть» (whole/part), где целому или родителю принадлежит часть или потомок.

🥱 Просто представьте отношения между библиотекой и книгами. Библиотека содержит разные книги, однако, удалив саму библиотеку, книги останутся, как и наоборот. И, понятное дело, книгам не может принадлежать библиотека.

📌 Также, как и ассоциация, агрегация может быть 3 видов: one-to-one, one-to-many, many-to-many. Эта концепция тоже используется очень часто и помогает описать разные жизненные задачи.

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
3
ScrapeGraphAI | ИИ-парсер

🙂 ScrapeGraphAI — это Python библиотека , созданная для автоматизированного сбора данных с сайтов и файлов. Для сбора данных она использует LLM (large language model), что делает работу с библиотекой очень простой.

🧠 Однако инструмент не привязан к конкретной модели, поэтому вы можете использовать, как, к примеру, и модели от OpenAI, как и модели, установленные на ваш компьютер с помощью Ollama. При этом структура кода остается одной и той же, что делает ScrapeGraphAI довольно полезным инструментом.

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
3
Это я в рабочей поездке в Грузии, вы как там?

Вид с моего номера
6
Создаем свой API (введение)

😎 API (Application Programming Interface)это интерфейс, который позволяет программным системам взаимодействовать друг с другом. API определяет набор правил и протоколов, которые используются для создания и интеграции программного обеспечения.

🙂 API функционирует по принципу запросов и ответов. Клиент отправляет запрос к серверу, сервер его обрабатывает и дает ответ. Обычно для этого используются протоколы HTTP или HTTPS. При создании API используются специальные методы HTTP для выполнения разных задач, вот основной список:

🔤 POST — отправка данных для создания ресурса.
🔤 GET — получение данных
🔤 PATCH — обновление данных.
🔤 DELETE — удаление данных.

☺️ Для создания API в Python можно воспользоватся несложным фреймворком FastAPI, который основан на уже нам знакомом Pydantic и Starlette — набор инструментов ASGI для создания асинхронных веб-сервисов. Чтобы создать свое первое приложение, выполните команды ниже:

🔤 Установите фреймворк с помощью команды pip install fastapi.
🔤 Скопируйте код выше в новый файл и запустите его в режиме разработки с помощью команды fastapi dev path/to/file.py в терминале.
🔤 Вы увидите довольно объемный вывод, и, перейдя по специальному адресу для обращения к серверу, который работает на вашем компьютере — http://127.0.0.1:8000/, вы сможете получить первый ответ от своего API.

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍3
Создаем свой API (часть 1)

😎 Первое с чем стоит разобраться — это параметры или переменные в пути URL. Задаются они по схожему принципу, как в обычном форматировании строк с помощью метода format(). Выглядит это все дело примерно так:


@app.get("/items/{item_id}")
async def read_item(item_id):
return {"item_id": item_id}


🙂 Тут мы создаем фукнцию, которая будет обрабатывать GET запрос в случае, когда в пути после items есть какое-то значение. Значение параметра пути item_id перейдет в аргумент функции item_id. Важно, чтобы эти названия совпадали, иначе аргумент функции будет считаться параметром запроса (query parameter).

☺️ Таким образом, если мы, к примеру, перейдем по ссылке http://127.0.0.1:8000/items/2, то наш API выдаст следующий ответ: {"item_id":2}. Также из-за того, что FastAPI использует Pydantic можно настроить валидацию переменных, просто указав тип с помощью стандартной аннотации типов.

👀 В дальнейшем рассматривать голый ответ от сервера может стать неудобно, поэтому FastAPI автоматически генерирует довольно удобные документации вашего API. Чтобы их рассмотреть перейдите по следующим ссылкам:

🔤 Документация, предоставленная Swagger UI — http://127.0.0.1:8000/docs.
🔤 Докуменация, предоставленная ReDoc — http://127.0.0.1:8000/redoc.

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
2
🚀🌐 ВАКАНСИЯ: FrontEnd Developer Junior 🌐🚀


Требования к кандидату:
➡️ JavaScript/ES6+: Знания и опыт в разработке на чистом JavaScript и современных стандартах ECMAScript.
➡️ Фреймворки: Владение React JS. Опыт работы с другими фреймворками – большой плюс!
➡️ HTML5 & CSS3: Продвинутые навыки в создании современных и отзывчивых интерфейсов.
➡️ RESTful API: Опыт работы с взаимодействием фронтенда с бэкендом через RESTful API.
➡️ Сборщики и модульные системы: Знание инструментов типа Webpack, Babel и понимание модульных систем (CommonJS, ES6 Modules).
➡️ Git: Навыки работы с системами контроля версий, в том числе опыт с Git.


Будет плюсом:
➡️ Тестирование кода: Знание и опыт в написании модульных и интеграционных тестов.
➡️ Опыт работы с GraphQL: Понимание и практический опыт работы с GraphQL API.
➡️ Английский язык: Хорошее понимание технической документации на английском.


Софт-скилы:
➡️ Коммуникабельность: Способность четко и эффективно общаться в команде.
➡️ Работа в команде: Опыт работы в командной среде, умение слушать и высказывать свое мнение.
➡️ Самостоятельность: Готовность принимать ответственность за свою работу и принимать инициативу.


🐱 Оклад: 500$ / месяц


🤖 Контакты @lunasantrope
Please open Telegram to view this post
VIEW IN TELEGRAM
2
Создаем свой API (часть 2)

😎 Все, что не является параметром пути (path parameter), автоматически становится параметром запроса (query parameter). Параметры запроса находятся в URL после знака ? и разделяются между собой знаком &.

🔤 http://127.0.0.1:8000/items/?skip=0&limit=10

🙂 Здесь /items/ будет путем, а skip и limit параметрами запроса со значениями 0 и 10. Разные виды параметров, конечно, между собой можно комбинировать и, конечно же, они могут быть и обязательными и необязательными.

👀 Также можно очень удобно настроить валидацию параметров. Сделать это можно немного разными способами, однако документация рекоменудет использовать функцию Annotated из встроенного модуля typing вместе с функциями Query и Path для валидации параметров запроса и пути.

🔤 Документация Pydantic: КЛИК
🔤 Документация FastAPI: КЛИК

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
4
Forwarded from ITDEAL
🚀🌐 ВАКАНСИЯ: FrontEnd Developer Junior 🌐🚀


Требования к кандидату:
➡️ JavaScript/ES6+: Знания и опыт в разработке на чистом JavaScript и современных стандартах ECMAScript.
➡️ Фреймворки: Владение React JS. Опыт работы с другими фреймворками – большой плюс!
➡️ HTML5 & CSS3: Продвинутые навыки в создании современных и отзывчивых интерфейсов.
➡️ RESTful API: Опыт работы с взаимодействием фронтенда с бэкендом через RESTful API.
➡️ Сборщики и модульные системы: Знание инструментов типа Webpack, Babel и понимание модульных систем (CommonJS, ES6 Modules).
➡️ Git: Навыки работы с системами контроля версий, в том числе опыт с Git.


Будет плюсом:
➡️ Тестирование кода: Знание и опыт в написании модульных и интеграционных тестов.
➡️ Опыт работы с GraphQL: Понимание и практический опыт работы с GraphQL API.
➡️ Английский язык: Хорошее понимание технической документации на английском.


Софт-скилы:
➡️ Коммуникабельность: Способность четко и эффективно общаться в команде.
➡️ Работа в команде: Опыт работы в командной среде, умение слушать и высказывать свое мнение.
➡️ Самостоятельность: Готовность принимать ответственность за свою работу и принимать инициативу.


🐱 Оклад: 500$ / месяц


🤖 Контакты @lunasantrope
Please open Telegram to view this post
VIEW IN TELEGRAM
2
Углубляемся в ООП (часть 3)

☺️ Композиция — это вид агрегации, однако с куда более сильной связью. Это тоже отношения «целое/часть» (whole/part), однако часть не может существовать отдельно от целого и может быть частью только одного целого за раз. А в свою очередь целое контролирует жизненный цикл части.

👀 Просто представьте анатомию человека: сердце может быть частью тела только одного человека (сиамских близнецов мы не рассматриваем) и оно не может существовать от человека отдельно.

😎 Также нужно добавить, что останавливаться только на композиции или агрегации не обязательно: можно вполне объединить их вместе. К примеру, один компонент может сразу создаваться вместе с целым в виде композиции, однако, если компонентов больше, то взаимодейстсвовать с целым они могут за счет агрегации.

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31
Шаблоны проектирования (часть 4)

🖥 Паттерн «Фасад» —  это структурный шаблон проектирования (structural patterns) , который обеспечивает упрощенный (но ограниченный) интерфейс для сложной системы классов, библиотеки или платформы.

🙂 Работать с библиотекой или фреймворком напрямую не всегда удобно: проекту не нужен полный функционал, однако инициализировать все объекты и соблюдать порядок все равно придется. Тогда на помощью приходит «Фасад», который предлагает оставить и организовать только те функции, которые действительно нужны.

👀 Также фасадов в проекте может быть несколько, таким образом вы сможете разбить работу с библиотекой или API на несколько слоев. Важно отметить, что обычно фасад полностью управляет жизненным циклом объектов, которые использует, другими словами вид отношений — композиция.

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍3