🐍 Итоги недели в мире Python и обзоры новых инструментов: как отправлять сообщения со своего SMTP-сервера
Привет!
Всю неделю мы мониторим интернет, чтобы в воскресенье прислать тебе интересное письмо. Наша цель – держать читателей в курсе последних открытий и тенденций в мире Python. В еженедельных письмах ты найдешь:
- Новые возможности в последних версиях Python
- Работа с базами данных и SQL в Python.
- Веб-разработка на Django и Flask.
- Машинное обучение и анализ данных с помощью Python.
- Автоматизация и работа с API на Python.
- Тестирование и отладка кода на Python.
- Задачи для новичков с решениями.
Как сделать современный GUI; Паттерн проектирования Unit of Work; Как отправлять зашифрованные имейлы с помощью собственного SMTP-сервера.
🆕 Как сделать современный GUI
WxPython – одна из лучших альтернатив стандартному Tkinter. WxPython часто используют для разработки кроссплатформенных настольных приложений, утилит, программ для научных и инженерных расчетов, а также прототипов интерфейсов. На WxPython сделан интерфейсы первого торрент-клиента BitTorrent, Dropbox и десктопной версии Google Drive.
Среди преимуществ wxPython:
- Широкий набор виджетов и GUI-элементов – меню, кнопки, текстовые поля, деревья, списки и многое другое.
- Поддержка OpenGL для создания 3D графики.
- Возможность проигрывания аудио и видео форматов.
- Множество инструментов для работы с файлами, сетями, потоками и базами данных.
Для первого знакомства с библиотекой Майк Дрисколл предлагает подробный туториал по созданию простого проекта – калькулятора.
🐍 Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека питониста»
💼 Паттерн проектирования Unit of Work
Шаблон Unit of Work используется для обеспечения согласованности данных при выполнении операций с базами данных: паттерн помогает поддерживать целостность данных и обеспечивает правильное управление транзакциями.
Идея шаблона заключается в том, что объекты, участвующие в операциях с данными, регистрируются в централизованном объекте, называемом Unit of Work. Этот объект отслеживает все изменения, внесенные в объекты, и откладывает их применение до момента, когда все изменения будут готовы к сохранению. После этого Unit of Work выполняет необходимые действия для обеспечения согласованности данных, например, начинает транзакцию и применяет все отложенные изменения.
Основные компоненты паттерна:
- Unit of Work – центральный объект, который координирует работу с источниками данных и управляет транзакциями.
- Repository – репозиторий, который обеспечивает доступ к объектам данных и их сохранение в источнике данных.
- Entity – объекты данных, которые необходимо добавить или изменить в источнике данных.
Последовательность действий при использовании шаблона выглядит так:
- Получение объектов данных из репозитория.
- Изменение объектов в соответствии с бизнес-логикой.
- Регистрация изменений в Unit of Work.
- Начало транзакции в источнике данных.
- Применение изменений – Unit of Work передает все зарегистрированные изменения в соответствующие репозитории, которые обновляют источник данных.
- Завершение транзакции – после успешного применения всех изменений Unit of Work подтверждает транзакцию, а в случае ошибки транзакция откатывается.
Преимущества использования паттерна:
- Согласованность данных – шаблон гарантирует, что все изменения будут успешно применены или полностью отменены в случае ошибки.
- Централизованное управление транзакциями в объекте Unit of Work упрощает код и улучшает его поддерживаемость.
- Отделение бизнес-логики от операций с данными повышает модульность и гибкость системы.
🐍🎓 Подтянуть свои знания по Python вы можете на нашем телеграм-канале «Библиотека собеса по Python»
🎸 Как использовать PostgreSQL для управления очередями задач в Django
Для управления очередями задач в Django-приложениях чаще всего используют Celery и Redis. Однако для небольших и средних проектов, которым не требуется особо сложная функциональность, оптимальным решением может стать PostgreSQL. Главное преимущество этого подхода – простота, особенно в сравнении с Celery, который часто вызывает приступы отчаяния у начинающих разработчиков. Процесс настройки Django, создания класса Task и написания воркера подробно показан здесь.
📧 Как отправлять зашифрованные имейлы с помощью собственного SMTP-сервера
Для отправки писем из Python-приложений можно использовать сторонние API или напрямую подключаться к SMTP-серверу. Первый способ (на примере SMTP Yandex) изложен в нашем туториале, а в этой статье пошагово разобран второй метод. Автор демонстрирует, как можно программно отправлять имейлы через собственный SMTP-сервер:
- Импортируются необходимые библиотеки для работы с SMTP и форматирования писем.
- Создается класс EmailSender, который инициализируется настройками SMTP-сервера (адрес, порт, учетные данные).
- В классе определяются методы для подключения к SMTP-серверу (connect) и отправки письма (send_email).
- Метод send_email формирует письмо в формате HTML и текстовом виде, добавляет необходимые заголовки и отправляет его через SMTP-соединение.
- В основном коде создается экземпляр EmailSender, устанавливается соединение с SMTP.
- Загружается HTML-шаблон письма из файла.
- Создается список адресов получателей (batch) из текстового файла.
- В цикле для каждого получателя отправляется сформированное ранее письмо через send_email.
- После отправки всех писем соединение с SMTP закрывается.
🐍🧩 Интересные задачи по Python для практики можно найти на нашем телеграм-канале «Библиотека задач по Python»
🗑 Что выбрать для сбора онлайн-данных: Scrapy или Crawlee
Scrapy и Crawlee – фреймворки для скрапинга. Первый – заслуженный ветеран, второй появился относительно недавно. Этот обзор поможет определить, какой из инструментов лучше подойдет для вашего проекта, а этот туториал на Хабре научит основам работы со Scrapy.
Особенности Scrapy:
- Написан на Python и бесшовно интегрируется с любыми другими Python-инструментами для сбора и обработки данных.
- Имеет многокомпонентную архитектуру с «пауками» (автономными краулерами), промежуточным ПО, конвейерами для обработки собранных данных и всевозможными настройками.
- Поддерживает распределенный режим работы через Scrapyd и Scrapy Cluster.
- Изначально ориентирован на работу со статическими HTML-страницами.
Преимущества Scrapy:
- Широко используется и имеет большое сообщество разработчиков.
- Имеется множество бесплатных туториалов.
- Расширить функциональность можно с помощью плагинов.
- Поддерживает множество форматов хранения данных (CSV, JSON, XML и др.)
Недостатки Scrapy:
- Работа с JavaScript-рендерингом требует дополнительных плагинов и настроек.
- Для ротации прокси и user agent нужны дополнительные плагины.
- Сложность может быть барьером для начинающих.
Особенности Crawlee:
- Поддерживает JavaScript и TypeScript в качестве языков разработки.
- Предоставляет готовые шаблоны для быстрого старта с Playwright и Puppeteer.
- Имеет встроенную поддержку headless-браузеров и отлично работает с JavaScript-рендерингом.
- Обладает функциями автомасштабирования, управления очередями, автоматической смены прокси и хранения данных.
- Предоставляет единый интерфейс для HTTP-запросов и работы с браузерами.
Преимущества Crawlee:
- Простой в освоении, особенно для разработчиков, знакомых с JavaScript/TypeScript.
- Поддерживает современные фреймворки (Puppeteer, Playwright).
- Имеет встроенную обработку JavaScript-рендеринга.
Недостатки Crawlee:
- Относительно молодой проект (по сравнению со Scrapy), меньшее сообщество.
- Для разработчиков Python, не знакомых с JavaScript/TypeScript – необходимость вникать в новый синтаксис.
🔥 Интересные проекты
На Хабре опубликовали несколько статей о крутых пет-проектах:
- Телеграм-бот для отслеживания зависимости самочувствия от погодных условий.
- Собственный мобильный клиент для YouTube, чтобы смотреть видео с котиками без рекламы и ленты рекомендаций.
- Автономная ИИ-стримерша, которая не попадает в бан и может остроумно общаться с пользователями – текстом и голосом.
Автор рассылки: Наталья Кайда