🐍 Итоги недели в мире Python и обзоры новых инструментов: как отправлять сообщения со своего SMTP-сервера

🐍 Итоги недели в мире 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 графики.
  • Возможность проигрывания аудио и видео форматов.
  • Множество инструментов для работы с файлами, сетями, потоками и базами данных.

Для первого знакомства с библиотекой Майк Дрисколл предлагает подробный туториал по созданию простого проекта – калькулятора.

На macOS и Windows 10 калькулятор выглядит по-разному
На macOS и Windows 10 калькулятор выглядит по-разному

🐍 Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека питониста»

💼 Паттерн проектирования 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 закрывается.
Для шифрования используется модуль симметричного шифрования cryptography
Для шифрования используется модуль симметричного шифрования cryptography

🐍🧩 Интересные задачи по 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 – необходимость вникать в новый синтаксис.

🔥 Интересные проекты

На Хабре опубликовали несколько статей о крутых пет-проектах:

Тян можно оставлять без присмотра

Автор рассылки: Наталья Кайда

44
Начать дискуссию