Опубликовано

Вышла книга “Программирование бэкенда на Python. Практическое руководство”

Программирование бэкенда на Python. Практическое руководство

Книга посвящена современным технологиям для программирования и поддержки серверной части (бэкенда) на Python. Рассказано о программировании на Python в облачной среде, управляемой через Docker и Kubernetes, о фреймворке Flask для веб-разработки на Python, о поглощении и преобразовании данных через FastAPI, об интеграции новых приложений и модулей Python с устоявшимися базами данных с применением SQLAlchemy, авторизации и аутентификации с применением OAuth, взаимодействии с брокерами сообщений Kafka и RabbitMQ, а также о повышении производительности языка Python и об эффективной работе с унаследованным кодом.

Для Python-разработчиков

В этой книге

  • Как писать эффективный и хорошо структурированный код на Python, придерживаясь наилучших практик
  • Как обеспечить эффективность приложений и упростить их масштабирование, применяя техники асинхронного программирования
  • Какова роль Kubernetes и Docker в оркестрации и контейнеризации приложений на Python
  • Как эксплуатировать облачные сервисы для обеспечения гарантированно высокой доступности и максимальной производительности.
  • Как усовершенствовать обработку данных путем интеграции с базами данных при помощи SQLAlchemy.
  • Как защищать веб-приложения, настраивая механизмы авторизации и аутентификации при помощи OAuth
  • Как эффективно обрабатывать данные в режиме реального времени при помощи брокеров сообщений RabbitMQ и Kafka
  • Как, сократить количество ошибок, реализовать непрерывную интеграцию и непрерывное развертывание

Эта книга — не просто руководство по программированию, а книга-маршрут, которая поможет выйти на уровень настоящего эксперта по серверной части стека, умеющего проектировать и развертывать мощные и эффективные приложения.

 

Тим Питерс

Тим Питерс (Tim Peters) — американский разработчик программного обеспечения, который создал алгоритм гибридной сортировки Timsort, внес большой вклад в язык программирования Python и его оригинальную реализацию CPython, а также известен в сообществе Python.
С 2001 по 2014 год он был активным членом совета директоров Python Software Foundation. Питерс был влиятельным автором списков рассылки Python. Он также является высокопоставленным участником форума Stack Overflow, в основном для ответов, касающихся Python.
Тим Питерс был удостоен награды Python Software Foundation за выдающиеся заслуги за 2017 год.
(источник, Википедия)

Книгу “Программирование бэкенда на Python. Практическое руководство” можно купить в нашем интенет-магазине.

Предисловие……………………………………………………………………. 20

Пролог……………………………………………………………………………. 23

Предварительные требования…………………………………………… 25

Начальные навыки…………………………………………………………………………………… 25

Использование кодов……………………………………………………………………………….. 25

Благодарности…………………………………………………………………. 27

ГЛАВА 1. Основы разработки внутренних компонентов……… 28

Введение……………………………………………………………………………………………………. 28

Описание разработки внутренних компонентов…………………………………… 29

Основные внутренние компоненты…………………………………………………. 29

Сервер…………………………………………………………………………………………… 29

База данных…………………………………………………………………………………. 31

Интерфейсы прикладного программирования (API)………………… 32

Веб-фреймворк……………………………………………………………………………… 33

Middleware (связующее или промежуточное программное обеспечение)      35

Кеширование………………………………………………………………………………… 36

Функционирование внутренних компонентов……………………………….. 36

Роль Python в разработке внутренних компонентов…………………………….. 38

Универсальность и читабельность…………………………………………………. 38

Универсальная стандартная библиотека………………………………………. 39

Фреймворки и инструменты для разработки внутренних компонентов               39

Поддержка асинхронной работы……………………………………………………. 40

Возможность интеграции…………………………………………………………………. 40

Возможность подключения к базам данных………………………………….. 41

Сообщество и ресурсы…………………………………………………………………….. 41

Искусственный интеллект и машинное обучение………………………….. 41

Настройка среды разработки: Python, VS Code и Linux………………………. 42

Установка Linux……………………………………………………………………………….. 42

Установка Python……………………………………………………………………………… 42

Установка Visual Studio Code (VS Code)…………………………………………. 43

Настройка VS Code для Python……………………………………………………….. 43

Настройка виртуальной среды……………………………………………………….. 44

Заключительные этапы и тестирование…………………………………………. 44

Знакомство с виртуальными средами…………………………………………………….. 45

Что такое виртуальная среда?………………………………………………………… 45

Зачем нужна виртуальная среда?…………………………………………………… 46

Как настроить и использовать виртуальную среду?…………………….. 46

Установка……………………………………………………………………………………… 46

Создание виртуальной среды…………………………………………………….. 46

Активация виртуальной среды…………………………………………………… 47

Установка пакетов……………………………………………………………………….. 47

Деактивация…………………………………………………………………………………. 47

Управление зависимостями………………………………………………………… 47

Передовой опыт………………………………………………………………………………… 48

Основные принципы работы с интерфейсом командной строки (CLI).. 49

Описание интерфейса командной строки………………………………………. 49

Основные команды интерфейса командной строки………………………. 49

Советы по использованию интерфейса командной строки………….. 52

Введение в управление версиями с помощью Git………………………………….. 53

Знакомство с управлением версиями и Git……………………………………… 53

Основные операции Git для разработки внутренних компонентов 54

Установка Git……………………………………………………………………………….. 54

Конфигурирование Git…………………………………………………………………. 54

Инициализация репозитория………………………………………………………. 54

Клонирование репозитория………………………………………………………… 55

Добавление и фиксация файлов………………………………………………….. 55

Ветвление и слияние……………………………………………………………………. 55

Размещение изменений………………………………………………………………… 56

Извлечение обновлений………………………………………………………………. 56

Обработка конфликтов при слиянии………………………………………….. 56

Использование журнала Git………………………………………………………… 56

Библиотека Python Refresher: синтаксис, структуры данных и функции 57

Синтаксис Python……………………………………………………………………………… 57

Отступы………………………………………………………………………………………… 57

Переменные………………………………………………………………………………….. 57

Комментарии………………………………………………………………………………… 58

Структуры данных…………………………………………………………………………… 58

Списки…………………………………………………………………………………………… 58

Кортежи………………………………………………………………………………………… 58

Множества……………………………………………………………………………………. 59

Словари………………………………………………………………………………………… 59

Функции…………………………………………………………………………………………….. 59

Определение функции………………………………………………………………….. 59

Вызов функции……………………………………………………………………………… 60

Параметры……………………………………………………………………………………. 60

Аргументы ключевых слов………………………………………………………….. 60

Произвольные аргументы……………………………………………………………. 61

Лямбда-функции…………………………………………………………………………… 61

Обработка ошибок……………………………………………………………………………. 61

Модули и пакеты………………………………………………………………………………. 62

Импорт модулей…………………………………………………………………………… 62

Импорт с помощью псевдонимов……………………………………………….. 62

Оператор импорта from……………………………………………………………….. 62

Передовой опыт программирования на Python…………………………………….. 63

Поддержка принципов «Дзен Python»…………………………………………….. 63

Соблюдение стандарта PEP 8…………………………………………………………. 63

Написание документальных строк…………………………………………………. 64

Использование встроенных функций и библиотек Python……………. 64

Использование списков и генераторов выражений……………………….. 65

Обработка ошибок с помощью исключений………………………………….. 65

Использование менеджеров контекста для управления ресурсами 66

Функция должна выполнять одну задачу и иметь
минимально возможный размер………………………………………………………. 66

Избежание преждевременной оптимизации…………………………………… 66

Использование контроля версий……………………………………………………… 67

Тестирование своего кода……………………………………………………………….. 67

Резюме……………………………………………………………………………………………………….. 67

ГЛАВА 2. Создание первого веб-приложения с помощью Flask 69

Введение……………………………………………………………………………………………………. 69

Основы Flask……………………………………………………………………………………………… 70

Что представляет собой Flask?………………………………………………………… 70

Основные возможности Flask…………………………………………………………… 71

Простота……………………………………………………………………………………….. 71

Гибкость……………………………………………………………………………………….. 71

Сервер разработки и отладчик…………………………………………………… 72

Основан на Юникоде…………………………………………………………………… 72

Документация………………………………………………………………………………. 72

Запуск и работа с Flask……………………………………………………………………. 72

Маршрутизация………………………………………………………………………………… 74

Шаблоны…………………………………………………………………………………………… 74

Настройка окружения Flask…………………………………………………………………….. 76

Создание проекта……………………………………………………………………………… 76

Настройка Flask………………………………………………………………………………… 77

Установка Flask……………………………………………………………………………. 77

Создание приложения Flask………………………………………………………… 77

Создание простого представления…………………………………………….. 77

Управление зависимостями с помощью Pip……………………………………. 77

Настройка приложения Flask………………………………………………………….. 78

Создание файла конфигурации………………………………………………….. 78

Загрузка конфигурации……………………………………………………………….. 78

Запуск приложения Flask…………………………………………………………………. 78

Командная строка Flask………………………………………………………………. 78

Использование скрипта……………………………………………………………….. 79

Маршрутизация и представления…………………………………………………………… 79

Определение маршрутов………………………………………………………………….. 80

Динамические маршруты………………………………………………………………… 80

Методы HTTP……………………………………………………………………………………. 81

Создание URL-адресов…………………………………………………………………….. 81

Обработка ошибок……………………………………………………………………………. 82

Эффективное сочетание маршрутов и представлений………………….. 83

Шаблоны и статические файлы………………………………………………………………. 83

Описание шаблонов…………………………………………………………………………. 84

Управление статическими файлами……………………………………………….. 85

Организация статических файлов………………………………………………. 86

Обслуживание статических файлов…………………………………………… 86

Работа с формами и загрузка файлов…………………………………………………….. 88

Flask — работа с формами………………………………………………………………. 88

Создание HTML-формы………………………………………………………………. 88

Создание маршрута для отображения формы………………………….. 88

Обработка данных формы………………………………………………………….. 88

Загрузка файлов……………………………………………………………………………….. 89

Модификация HTML-формы для загрузки файлов…………………… 89

Обработка загрузки файлов в Flask……………………………………………. 89

Основы интеграции баз данных……………………………………………………………… 90

Настройка SQLAlchemy с помощью Flask……………………………………… 92

Установка Flask-SQLAlchemy…………………………………………………….. 92

Настройка приложения……………………………………………………………….. 92

Определение моделей………………………………………………………………………. 92

Создание базы данных…………………………………………………………………….. 93

Взаимодействие с базой данных…………………………………………………….. 93

Вставка данных……………………………………………………………………………. 93

Запрос данных……………………………………………………………………………… 93

Обновление данных…………………………………………………………………….. 94

Удаление данных…………………………………………………………………………. 94

Работа с отношениями……………………………………………………………………… 94

Извлечение связанных данных………………………………………………………… 95

Использование опций запросов………………………………………………………. 95

Введение в расширения Flask………………………………………………………………….. 96

Описание расширений Flask……………………………………………………………. 96

Flask-WTF……………………………………………………………………………………… 97

Flask-SQLAlchemy………………………………………………………………………… 97

Flask-Migrate…………………………………………………………………………………. 97

Flask-Login…………………………………………………………………………………….. 98

Flask-Mail………………………………………………………………………………………. 98

Flask-RESTful……………………………………………………………………………….. 98

Использование расширений Flask…………………………………………………… 99

Развертывание приложения Flask…………………………………………………………. 100

Подготовка приложения Flask к развертыванию…………………………. 100

Выбор хостинга………………………………………………………………………………. 101

Настройка веб-сервера и сервера приложений WSGI………………… 101

Использование Heroku…………………………………………………………………… 102

Подготовка приложения……………………………………………………………. 102

Настройка Git-репозитория………………………………………………………. 102

Создание приложения Heroku………………………………………………….. 102

Выполнение проверки развертывания…………………………………….. 103

Резюме……………………………………………………………………………………………………… 103

ГЛАВА 3. Дополнительные возможности Flask………………….. 105

Введение………………………………………………………………………………………………….. 105

Создание модульной структуры больших приложений с помощью
Flask Blueprints………………………………………………………………………………………… 106

Для чего предназначен Flask Blueprints?………………………………………. 106

Создание и регистрация эскизов…………………………………………………… 107

Определение эскиза…………………………………………………………………… 107

Регистрация эскиза…………………………………………………………………….. 107

Структурирование представлений в эскизах………………………………. 108

Использование эскизов…………………………………………………………………… 108

Шаблон Application Factory во Flask…………………………………………………….. 109

Описание шаблона Application Factory………………………………………… 109

Использование шаблона Application Factory……………………………….. 110

Создание функции Factory………………………………………………………… 110

Настройка параметров конфигурации…………………………………….. 110

Регистрация сценариев и расширений…………………………………….. 111

Реализация RESTful-сервисов с помощью Flask-RESTful…………………… 112

Введение в Flask-RESTful………………………………………………………………. 112

Функционирование Flask-RESTful………………………………………………… 113

Создание REST API с помощью Flask-RESTful……………………………. 113

Тестирование API…………………………………………………………………………… 115

Аутентификация и авторизация пользователей………………………………….. 115

Значение аутентификации, авторизации и управления сессиями 115

Аутентификация…………………………………………………………………………. 115

Авторизация……………………………………………………………………………….. 116

Управление сессиями………………………………………………………………… 116

Реализация аутентификации в Flask……………………………………………… 116

Установка Flask-Login……………………………………………………………….. 116

Настройка Flask-Login………………………………………………………………. 116

Функция загрузчика пользователя…………………………………………… 117

Определение модели пользователя………………………………………….. 117

Создание маршрутов аутентификации……………………………………. 117

Выполнение авторизации………………………………………………………………. 118

Управление доступом на основе ролей (RBAC)……………………… 118

Проверка прав доступа……………………………………………………………… 119

Обработка ошибок и ведение журнала………………………………………………… 119

Flask — обработка ошибок……………………………………………………………. 120

Обработка ошибок приложения……………………………………………….. 120

Обработка исключений…………………………………………………………….. 120

Flask — ведение журнала………………………………………………………………. 121

Использование протоколирования для данных запроса……………. 121

Пользовательские средства регистрации…………………………………….. 122

Методы оптимизации производительности…………………………………………. 122

Оптимизация баз данных……………………………………………………………….. 123

Оптимизация запросов………………………………………………………………. 123

Пакетные вставки и обновления……………………………………………….. 123

Оптимизация обработки запросов………………………………………………… 123

Эффективная последовательность данных……………………………… 123

Асинхронные обработчики………………………………………………………. 124

Кеширование ответов………………………………………………………………… 125

Настройка приложений и веб-серверов……………………………………….. 125

Мониторинг и профилирование……………………………………………………. 126

Интеграция приложений Flask с Docker……………………………………………….. 127

Установка Docker……………………………………………………………………………. 127

Создание файла Dockerfile………………………………………………………… 128

Создание файла .dockerignore…………………………………………………… 129

Сборка образа Docker……………………………………………………………….. 129

Запуск контейнера Docker………………………………………………………… 129

Тестирование контейнера Docker…………………………………………………. 129

Резюме……………………………………………………………………………………………………… 130

ГЛАВА 4. Введение в FastAPI………………………………………….. 132

Введение………………………………………………………………………………………………….. 132

Переход на FastAPI………………………………………………………………………………… 133

Основные различия между FastAPI и Flask………………………………….. 133

Производительность………………………………………………………………….. 133

Аннотации типов данных и автоматическая валидация данных 134

Внедрение зависимостей…………………………………………………………… 135

Встроенная интерактивная документация по API………………….. 136

Современные возможности Python…………………………………………… 136

Создание RESTful API с помощью FastAPI………………………………………….. 136

Определение конечных точек RESTful…………………………………………. 137

Параметры пути и строки запросов……………………………………………… 138

Параметры пути…………………………………………………………………………. 138

Параметры запросов…………………………………………………………………. 138

Использование тела запроса…………………………………………………………. 139

Обработка ответа…………………………………………………………………………… 139

Пользовательские коды состояния…………………………………………… 139

Заголовки ответа……………………………………………………………………….. 139

Обработка ошибок…………………………………………………………………………. 140

Внедрение зависимостей……………………………………………………………………….. 140

Описание внедрения зависимостей в FastAPI………………………………. 141

Как работает внедрение зависимостей в FastAPI?………………………. 141

Определение зависимостей……………………………………………………….. 141

Использование зависимостей в обработчиках маршрутов……. 142

Работа с зависимостями в больших приложениях………………………. 143

Расширенная интеграция баз данных с SQLAlchemy…………………………. 143

Настройка SQLAlchemy с помощью FastAPI……………………………….. 144

Установка необходимых пакетов…………………………………………….. 144

Настройка URL базы данных…………………………………………………… 144

Создание базы данных и таблиц……………………………………………… 144

Интеграция SQLAlchemy с FastAPI……………………………………………….. 145

Зависимость от сеанса работы с базой данных……………………… 145

Выполнение операций с базой данных……………………………………. 145

Асинхронная обработка………………………………………………………………… 146

Настройка асинхронного подключения к базе данных…………. 146

Подключение и отключение событий………………………………………. 146

Использование асинхронных запросов…………………………………… 146

Реализация фоновых задач……………………………………………………………………. 147

Основы фоновых задач в FastAPI………………………………………………….. 147

Как определить фоновые задачи?…………………………………………………. 147

Реализация более сложных фоновых операций………………………….. 148

Настройка Celery……………………………………………………………………….. 148

Запуск задач Celery из FastAPI…………………………………………………. 149

Интеграция FastAPI и Docker………………………………………………………………… 150

Установка Docker……………………………………………………………………………. 150

Создание Docker-файла для FastAPI…………………………………………….. 150

Создание образа Docker………………………………………………………………… 151

Запуск приложения FastAPI в контейнере Docker……………………….. 152

Проверка работоспособности приложения…………………………………. 152

Резюме……………………………………………………………………………………………………… 152

ГЛАВА 5. Работа с базами данных…………………………………… 154

Введение………………………………………………………………………………………………….. 154

MySQL и PostgreSQL………………………………………………………………………………. 155

MySQL……………………………………………………………………………………………… 156

PostgreSQL……………………………………………………………………………………….. 156

Выбор между MySQL и PostgreSQL………………………………………………. 157

MongoDB…………………………………………………………………………………………………. 159

Описание MongoDB и модели документов…………………………………… 159

Документы………………………………………………………………………………….. 159

Коллекции…………………………………………………………………………………… 159

Преимущества MongoDB……………………………………………………………….. 160

Ключевые особенности MongoDB………………………………………………… 160

Интеграция MongoDB…………………………………………………………………….. 161

Установка…………………………………………………………………………………… 161

Подключение к MongoDB…………………………………………………………. 161

Операции…………………………………………………………………………………….. 161

Принципы проектирования баз данных……………………………………………….. 162

Основные принципы проектирования баз данных………………………. 162

Нормализация……………………………………………………………………………. 162

Модель отношений между сущностями…………………………………… 163

Пример разработки схемы базы данных……………………………………… 163

SQL-код для создания таблиц……………………………………………………….. 164

Операции CRUD……………………………………………………………………………………… 165

Создание записей (CREATE)…………………………………………………………. 165

Чтение записей (READ)………………………………………………………………….. 166

Обновление записей (UPDATE)……………………………………………………… 166

Удаление записей (DELETE)…………………………………………………………. 167

Рекомендации по выполнению операций CRUD…………………………. 167

Расширенные методы обработки запросов…………………………………………. 167

Подзапросы…………………………………………………………………………………….. 168

Пример программы: «Поиск курсов, на которые не зарегистрировался ни один студент»      168

Объединения……………………………………………………………………………………. 168

Пример программы: «Список студентов с информацией о курсах» 169

Агрегатные функции SQL………………………………………………………………. 169

Пример программы: «Подсчет количества студентов, записанных на каждый курс»               169

Расширенная фильтрация с помощью оператора HAVING………… 170

Пример программы: «Курсы с более чем 5 студентами»……….. 170

Оконные функции……………………………………………………………………………. 170

Пример программы: «Распределение студентов по дате зачисления на каждый курс»            170

Миграция баз данных и контроль версий……………………………………………. 171

Основные сведения о миграции баз данных………………………………… 172

Настройка Alembic…………………………………………………………………………. 172

Установка Alembic…………………………………………………………………….. 172

Инициализация Alembic…………………………………………………………….. 172

Настройка Alembic…………………………………………………………………….. 173

Создание и применение миграций………………………………………………… 173

Создание миграции……………………………………………………………………. 173

Редактирование сценария миграции………………………………………… 173

Применение миграций……………………………………………………………….. 173

Управление изменениями схемы базы данных……………………………. 174

Создание версий………………………………………………………………………… 174

Совместная работа……………………………………………………………………. 174

Развертывание……………………………………………………………………………. 174

Интеграция баз данных с ОРМ на Python……………………………………………. 175

Обзор ОРМ для Python…………………………………………………………………… 175

Обзор SQLAlchemy…………………………………………………………………………. 175

SQLAlchemy Core……………………………………………………………………….. 175

SQLAlchemy ORM……………………………………………………………………… 176

Интеграция SQLAlchemy ORM с Python………………………………………. 176

Установка…………………………………………………………………………………… 176

Определение моделей………………………………………………………………… 176

Создание сессии…………………………………………………………………………. 177

Выполнение операций с базой данных……………………………………. 177

Стратегии кеширования для оптимизации баз данных………………………. 178

Типы кеширования…………………………………………………………………………. 178

Кеширование результатов………………………………………………………… 178

Кеширование объектов……………………………………………………………… 178

Кеширование планов запросов………………………………………………… 179

Реализация кеширования в веб-приложениях……………………………… 180

Redis в качестве кеша………………………………………………………………… 180

Стратегия кеширования…………………………………………………………….. 180

Рекомендации по эффективному кешированию…………………………… 181

Резюме……………………………………………………………………………………………………… 181

ГЛАВА 6. Асинхронное программирование в Python…………. 184

Введение………………………………………………………………………………………………….. 184

Общее описание асинхронного программирования…………………………… 186

Что такое асинхронное программирование?……………………………….. 186

Асинхронное программирование для разработки внутренних компонентов     186

Примеры использования асинхронного программирования……… 187

Веб-серверы……………………………………………………………………………….. 187

Обработка данных…………………………………………………………………….. 187

Работа приложения в режиме реального времени………………….. 187

Архитектура микросервисов…………………………………………………….. 188

Как работает асинхронное программирование?………………………… 188

Цикл событий……………………………………………………………………………… 188

Корутины (сопрограммы или асинхронные функции)…………… 188

Задачи и фьючерсы……………………………………………………………………. 188

Пример программы: «Асинхронное выполнение»……………………….. 189

Основы asyncio……………………………………………………………………………………….. 189

Синтаксис async……………………………………………………………………………… 190

Синтаксис await……………………………………………………………………………… 190

Структура программы asyncio………………………………………………………. 190

Пример программы: «Интеграция библиотеки asyncio в приложение для университета»             191

Разработка асинхронных веб-приложений…………………………………………. 192

Пример программы: «Асинхронное университетское
приложение»……………………………………………………………………………………. 193

Настройка и установка……………………………………………………………… 193

Определение конечных точек асинхронной связи………………….. 193

Асинхронный доступ к базам данных………………………………………………….. 194

Описание асинхронного доступа к базам данных………………………. 194

Настройка и установка………………………………………………………………….. 195

Интеграция асинхронных операций с базами данных
в веб-фреймворке FastAPI………………………………………………………………. 195

Конфигурация…………………………………………………………………………….. 195

Функции асинхронной базы данных……………………………………….. 196

Использование асинхронных функций в маршрутах…………….. 197

Внедрение веб-сокетов…………………………………………………………………………… 197

WebSocket — что это?……………………………………………………………………. 197

Реализация WebSocket в FastAPI…………………………………………………… 198

Настройка и базовая конечная точка WebSocket…………………… 198

Установка FastAPI и Uvicorn…………………………………………………….. 199

Определение конечной точки WebSocket………………………………… 199

Обновление записей в режиме реального времени…………………. 199

Сохранение соединений WebSocket………………………………………… 200

Интеграция с процессом регистрации……………………………………… 200

Передовой опыт и шаблоны Async……………………………………………………….. 201

Обработка ошибок в асинхронном коде………………………………………. 201

Пример программы: «Корректная обработка ошибок базы данных»             201

Управление параллельными процессами и отмена задач………….. 202

Пример программы: «Отмена устаревших запросов
к базе данных»……………………………………………………………………………. 202

Использование менеджеров контекста для управления ресурсами 203

Пример программы: «Асинхронный менеджер контекста для подключения к базе данных»  203

Разделение и модульное построение кода…………………………………… 203

Пример программы: «Модульная обработка WebSocket»…….. 203

Отладка асинхронных приложений……………………………………………………… 204

Инструменты и методы отладки……………………………………………………. 205

Пример программы: «Ведение подробного журнала»…………… 205

Пример программы: «Использование сообщений print для получения немедленной обратной связи»               205

Пример программы: «Включение режима отладки asyncio»…. 206

Резюме……………………………………………………………………………………………………… 207

ГЛАВА 7. Организация работы с пользователями
и их безопасность……………………………………………………………. 209

Введение………………………………………………………………………………………………….. 209

Проектирование систем аутентификации пользователей………………….. 210

Определение требований……………………………………………………………….. 210

Компоненты системы аутентификации пользователей………………. 211

Пример программы: «Подключение аутентификации пользователей» 212

Реализация стандартов OAuth и JWT…………………………………………………… 213

Введение в OAuth……………………………………………………………………………. 213

Введение в веб-токены JSON (JWT)……………………………………………….. 214

Пример программы: «Реализация OAuth и JWT»…………………………. 214

Настройка OAuth с помощью провайдера………………………………. 214

Интеграция OAuth в приложение……………………………………………… 215

Реализация JWT для управления сеансами…………………………….. 215

Контроль доступа на основе ролей (RBAC)………………………………………… 216

Определение эффективности RBAC……………………………………………… 216

Пример программы: «Внедрение RBAC»……………………………………… 217

Определение ролей и разрешений……………………………………………. 217

Настройка среды……………………………………………………………………….. 217

Определение моделей пользователей и ролей………………………… 218

Создание ролей………………………………………………………………………….. 218

Назначение ролей пользователям……………………………………………. 218

Обеспечение проверки ролей……………………………………………………. 219

Обеспечение безопасности REST API………………………………………………….. 219

Что необходимо для обеспечения безопасности REST API?……… 219

Стратегии обеспечения безопасности REST API………………………… 220

Использование HTTPS………………………………………………………………. 220

Аутентификация и авторизация……………………………………………….. 220

Валидация и дезинфекция входных данных……………………………. 221

Внедрение ограничения скорости……………………………………………. 222

Управление сеансами пользователей…………………………………………………… 222

Основные понятия…………………………………………………………………………… 222

Реализация безопасного управления сеансами…………………………… 223

Создание и обработка сеансов…………………………………………………. 223

Сохранение сеансов………………………………………………………………….. 224

Истечение срока действия сеанса…………………………………………….. 224

Обслуживание и безопасность сеансов…………………………………… 224

Внедрение двухфакторной аутентификации……………………………………….. 225

Описание двухфакторной аутентификации…………………………………. 225

Шаги по внедрению 2FA………………………………………………………………… 226

Генерация секретного ключа для пользователя……………………… 226

Связывание секретного ключа с приложением Authenticator… 227

Проверка TOTP во время входа в систему……………………………….. 227

Интеграция 2FA в процесс входа в систему…………………………….. 227

Резюме……………………………………………………………………………………………………… 228

ГЛАВА 8. Развертывание внутренних приложений, написанных на языке Python          230

Введение………………………………………………………………………………………………….. 230

Обзор Docker и контейнеров………………………………………………………………….. 231

Описание контейнерной технологии…………………………………………….. 231

Роль Docker в контейнеризации…………………………………………………….. 231

Доминирующее положение Docker……………………………………………….. 232

Пример программы: «Использование Docker»…………………………….. 233

Использование Docker для приложений, написанных на языке Python 234

Установка Docker……………………………………………………………………………. 234

Контейнеризация университетского приложения……………………….. 236

Подготовка приложения……………………………………………………………. 236

Создание Dockerfile……………………………………………………………………. 236

Сборка образа Docker……………………………………………………………….. 237

Запуск контейнера Docker………………………………………………………… 237

Kubernetes для управления приложениями………………………………………….. 237

Описание Kubernetes………………………………………………………………………. 238

Установка и настройка Kubernetes……………………………………………….. 238

Установка Minikube…………………………………………………………………… 238

Установка kubectl………………………………………………………………………. 239

Развертывание университетского приложения на Kubernetes……. 239

Создание конфигурации развертывания…………………………………. 239

Развертывание приложения………………………………………………………. 240

Открытие приложения……………………………………………………………….. 240

Доступ к приложению……………………………………………………………….. 240

CI/CD для внутренних приложений на Python……………………………………. 241

Основные принципы работы CI/CD……………………………………………… 241

Использование CI/CD для университетского приложения…………. 241

Настройка контроля версий……………………………………………………… 241

Выбор инструмента CI/CD……………………………………………………….. 242

Использование Nginx в качестве обратного прокси-сервера……………… 244

Функция Nginx…………………………………………………………………………………. 244

Установка и настройка Nginx………………………………………………………… 245

Установка Nginx…………………………………………………………………………. 245

Настройка Nginx в качестве обратного прокси-сервера………… 245

SSL-сертификаты и настройка HTTPS…………………………………………………. 247

Описание SSL/TLS и HTTPS………………………………………………………….. 247

Генерация SSL-сертификатов………………………………………………………… 247

Установка Certbot………………………………………………………………………. 248

Получение сертификата……………………………………………………………. 248

Проверка установки SSL-сертификата…………………………………….. 248

Конфигурация HTTPS в Nginx……………………………………………………….. 248

Масштабирование приложений на Python………………………………………….. 249

Необходимость масштабирования……………………………………………….. 249

Горизонтальное и вертикальное масштабирование…………………… 250

Горизонтальное масштабирование (масштабирование наружу/внутрь)       250

Вертикальное масштабирование (масштабирование вверх/вниз) 250

Реализация масштабирования в Kubernetes…………………………………. 250

Определение запросов и лимитов ресурсов…………………………….. 251

Настройка горизонтального автоматического масштабирования подсистем             252

Контроль масштабирования…………………………………………………….. 253

Резюме……………………………………………………………………………………………………… 253

ГЛАВА 9. Микросервисы и интеграция с облаком…………….. 255

Введение………………………………………………………………………………………………….. 255

Проектирование и разработка микросервисов с помощью Python……. 256

Разбиение приложения на микросервисы…………………………………….. 257

Определение границ сервисов……………………………………………………….. 257

Создание независимых сред………………………………………………………….. 257

Разработка API для межсервисного взаимодействия………………….. 258

Упаковка сервисов в контейнеры………………………………………………….. 258

Управление микросервисами с помощью Docker и Kubernetes………….. 259

Контейнеризация с помощью Docker……………………………………………. 259

Упаковка каждого микросервиса в контейнер………………………… 260

Организация работы с помощью Kubernetes……………………………….. 260

Создание развертываний Kubernetes……………………………………….. 261

Управление сервисами с помощью Kubernetes Services…………. 261

Развертывание приложений Python на AWS……………………………………….. 262

Настройка AWS для университетского приложения…………………… 262

Создание учетной записи AWS………………………………………………… 262

Настройка IAM (управление идентификацией и доступом)….. 263

Настройка AWS CLI………………………………………………………………….. 263

Развертывание приложения на AWS…………………………………………….. 264

Вариант 1: использование Elastic Beanstalk……………………………. 264

Вариант 2: использование EC2………………………………………………… 264

Использование бессерверных архитектур с AWS Lambda………………… 265

Описание AWS Lambda…………………………………………………………………. 265

Установка AWS Lambda………………………………………………………………… 266

Подготовка приложения……………………………………………………………. 266

Создание функции Lambda в AWS…………………………………………… 267

Реализация gRPC для взаимодействия микросервисов……………………….. 268

Зачем нужен gRPC………………………………………………………………………….. 268

Реализация gRPC в микросервисах на Python……………………………… 269

Определение сервиса с помощью буферов протокола…………… 269

Создание кода сервера и клиента…………………………………………….. 270

Реализация сервиса на Python………………………………………………….. 270

Создание клиента………………………………………………………………………. 271

Резюме……………………………………………………………………………………………………… 271

ГЛАВА 10. Брокеры сообщений и асинхронная обработка задач 273

Введение………………………………………………………………………………………………….. 273

Обзор брокеров сообщений…………………………………………………………………… 274

Роль брокеров сообщений во внутренних приложениях…………….. 274

Redis как брокер сообщений………………………………………………………….. 275

Каким образом Redis обеспечивает обмен сообщениями?…….. 275

Интеграция Kafka для обработки данных в реальном времени………… 277

Описание Apache Kafka…………………………………………………………………. 277

Основные компоненты Kafka………………………………………………………… 277

Интеграция Kafka для обработки данных в режиме
реального времени………………………………………………………………………….. 278

Установка и настройка Kafka………………………………………………….. 278

Создание тем………………………………………………………………………………. 278

Реализация производителей и потребителей Kafka……………….. 278

Асинхронная обработка задач с помощью Celery………………………………. 280

Знакомство с асинхронной обработкой задач…………………………….. 280

Использование Celery для асинхронной обработки задач…………. 280

Как работает Celery?…………………………………………………………………. 281

Использование Celery…………………………………………………………………….. 281

Установка Celery и Redis…………………………………………………………… 281

Настройка Celery……………………………………………………………………….. 281

Запуск Celery Worker…………………………………………………………………. 282

Постановка задач в очередь……………………………………………………… 282

RabbitMQ как альтернативный брокер сообщений…………………………….. 282

Описание RabbitMQ и принцип его работы…………………………………. 283

Интеграция RabbitMQ……………………………………………………………………. 283

Установка RabbitMQ…………………………………………………………………. 284

Настройка RabbitMQ в приложении………………………………………… 284

Отправка сообщений…………………………………………………………………. 285

Резюме……………………………………………………………………………………………………… 285

Эпилог………………………………………………………………………….. 287

Опубликовано

Новинка: “Архитектура бэкенда. API для надежных корпоративных приложений”

Архитектура бэкенда. API для надежных корпоративных приложений

Книга посвящена полному циклу бэкенд-разработки, начиная от сбора требований и заканчивая мониторингом приложения. Основные темы книги касаются  масштабирования приложений, балансировки нагрузки, создания и доработки REST API, подбора инструментов для анализа данных, технологии SQL и NoSQL, обеспечения безопасности приложений, архитектурных стилей, применяемых при проектировании бэкенда. Также рассмотрены вопросы тестирования и развёртывания приложений, обмен данными в синхронном и асинхронном режиме, разница между связанностью и связностью. Без жесткой привязки к конкретным технологиям раскрыты основные особенности и сложности, возникающие в процессе создания новых сервисов, а также даны рекомендации по улучшению имеющихся сервисов и микросервисов. Структура книги подразумевает сквозное изучение материала, раскрывает принципы построения бэкенд-решений в рамках реальных проектов, где требуется одновременно учитывать технологическую составляющую, меняющиеся бизнес-требования и человеческий фактор.

Для разработчиков и архитекторов сложных программных систем

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

На бэкенде развиваются микросервисы, API баз данных, интеграция приложения со сторонними сервисами, обеспечивается масштабирование приложений, отказоустойчивость и балансировка нагрузки.

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

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

Ключевые темы:

 

  • Методики сбора требований к программной системе перед началом ее разработки
  • Рассмотрение основных паттернов коммуникации между сервисами, включая синхронные и асинхронные взаимодействия
  • Управление операционными данными проекта, изучение реляционных и нереляционных (SQL и NoSQL) подходов к моделированию данных
  • Управление сложной логикой приложения, архитектурные стили, связанность и связность
  • Безопасность приложения, защита от хакерских атак, безопасное хранение данных
  • Мониторинг приложения, анализ инцидентов
  • Доставка изменений, использование тестов, автоматическое тестирование

Книгу “Архитектура бэкенда. API для надежных корпоративных приложений” можно купить в нашем интенет-магазине.

Опубликовано

Новинка: “WebAssembly. Практическое руководство”

WebAssembly. Практическое руководств

Базовая книга о технологии WebAssembly, позволяющей писать браузерный код на многих распространённых языках программирования и интегрировать этот код с JavaScript. В книге избран проектный подход и рассказано, как при помощи библиотек и функций WebAssembly переносить и переиспользовать в веб-приложениях код на C++, Rust и языках для платформы .NET. Рассмотрено, как создавать децентрализованные приложения и средства для периферийных вычислений с повышенными требованиями к безопасности, производительности и интероперабельности при работе в браузере.  Особое внимание уделено библиотеке Tensorflow.js, поддерживающей глубокое обучение в браузере на основе пользовательских запросов.

Для веб-разработчиков и исследователей языков программирования

Животное на обложке — это норвич-терьер. Эти бесстрашные, активные и ласковые собачки были популярны среди студентов Кембриджского университета в 1870-х годах, которые держали их в общежитиях в качестве домашних животных. В США норвичи добились успеха в охоте как на грызунов, так и на лис, поскольку их небольшой размер позволял забираться в узкие норы, в которые гончие залезть не могли.

The Definitive Guide

Эффективный кроссплатформенный код

Перед вами подробное и доступное введение в одну из наиболее революционных технологий современной IT-индустрии.
Исходно язык WebAssembly возник как средство, позволяющее внедрять в браузер иные языки кроме JavaScript, а сегодня превратился в многофункциональный набор инструментов, обеспечивающих переносимость, высокую производительность, безопасность и многоразовость браузерного кода. Сегодня на WebAssembly можно писать для разнообразных платформ, и их круг постоянно расширяется.

Предлагается поступательное введение в технологию: в рамках книги разобрано несколько постепенно усложняющихся примеров, в которых вы научитесь при помощи WebAssembly внедрять в браузер код C++, Rust, .NET, интегрировать в веб-приложение библиотеку машинного обучения Tensorflow.js. Изложенный материал будет полезен при разработке встраиваемых систем, в научных вычислениях, при создании стартапов и повышении производительности и интероперабельности имеющихся продуктов.

  • Как WebAssembly способствует улучшенной переносимости кода с платформы на платформу
  • Как переиспользовать имеющиеся программные ресурсы и развертывать их в разных средах и контекстах
  • Как WebAssembly повышает устойчивость приложения к известным уязвимостям
  • Как WebAssembly помогает развертывать унаследованный код в веб-приложениях
  • Как расширить пользовательскую аудиторию веб-приложения
  • Как при помощи WebAssembly писать децентрализованные приложения и выполнять периферийные вычисления
  • Как интегрировать JavaScript с другими языками для повышения производительности, безопасности и быстродействия приложений и сайтов

Книгу “WebAssembly. Практическое руководство” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Предисловие…………………………………………………………………………………………….. 9

Условные обозначения, используемые в этой книге………………………………………………………………. 10

Использование примеров программного кода………………………………………………………………………… 11

Онлайн-обучение O’Reilly…………………………………………………………………………………………………………. 11

Как с нами связаться………………………………………………………………………………………………………………….. 11

Благодарности…………………………………………………………………………………………………………………………… 12

Глава 1. Знакомство с WebAssembly……………………………………………………….. 15

Что WebAssembly может вам предложить……………………………………………………………………………….. 15

История развития веба………………………………………………………………………………………………………………. 18

Истоки JavaScript……………………………………………………………………………………………………………………….. 19

Эволюция веб-платформ…………………………………………………………………………………………………………… 21

Native Client (NaCl)…………………………………………………………………………………………………………………….. 24

asm.js…………………………………………………………………………………………………………………………………………… 26

Появление WebAssembly…………………………………………………………………………………………………………… 28

Глава 2. Нечто вроде “Hello, World”………………………………………………………. 31

Текстовый формат WebAssembly — Wat (WebAssembly Text Format)………………………………….. 32

Преобразование Wat в Wasm……………………………………………………………………………………………………. 36

Выполнение Wasm в Repl………………………………………………………………………………………………………….. 38

Выполнение WebAssembly в браузере…………………………………………………………………………………….. 39

Глава 3. Модули в WebAssembly…………………………………………………………….. 43

Структура модуля……………………………………………………………………………………………………………………… 44

Изучение секций модуля……………………………………………………………………………………………………………. 46

Работа с модулями…………………………………………………………………………………………………………………….. 49

Будущая интеграция с модулями ES6……………………………………………………………………………………… 55

Глава 4. Память в WebAssembly……………………………………………………………… 57

Типизированные массивы…………………………………………………………………………………………………………. 58

Объекты Memory в WebAssembly……………………………………………………………………………………………… 62

Использование Memory API в WebAssembly……………………………………………………………………………. 65

И напоследок строки…………………………………………………………………………………………………………………. 70

Глава 5. Совместное использование C++ и WebAssembly……………………….. 77

Функции в C………………………………………………………………………………………………………………………………… 78

Всё усложняется………………………………………………………………………………………………………………………… 87

C/C++ и Webassembly………………………………………………………………………………………………………………… 95

Наконец-то “Hello, World!” на WebAssembly…………………………………………………………………………. 101

Глава 6. Применение WebAssembly: традиционный код под браузером.. 105

Программа “Hello, World!” — теперь настоящая…………………………………………………………………… 106

Перенос стороннего кода………………………………………………………………………………………………………… 111

Проект libsodium………………………………………………………………………………………………………………………. 125

Глава 7. Таблицы в WebAssembly…………………………………………………………. 127

Статическое и динамическое связывание……………………………………………………………………………… 127

Создание объектов Table в модулях………………………………………………………………………………………. 132

Динамическое связывание в WebAssembly……………………………………………………………………………. 135

Глава 8. WebAssembly в серверных приложениях…………………………………. 139

Нативные расширения для Node.js………………………………………………………………………………………… 140

WebAssembly и Node.js……………………………………………………………………………………………………………. 144

“Атака на цепочку поставок”………………………………………………………………………………………………….. 147

WebAssembly и Deno……………………………………………………………………………………………………………….. 148

Взгляд в будущее……………………………………………………………………………………………………………………… 152

Глава 9. WebAssembly за работой: TensorFlow.js…………………………………… 155

Аппаратная платформа…………………………………………………………………………………………………………… 156

Playground…………………………………………………………………………………………………………………………………. 157

TensorFlow.js…………………………………………………………………………………………………………………………….. 158

Серверный модуль на WebAssembly……………………………………………………………………………………… 161

Глава 10. Rust………………………………………………………………………………………. 165

Введение в Rust………………………………………………………………………………………………………………………… 166

Rust и WebAssembly…………………………………………………………………………………………………………………. 171

wasm-bindgen……………………………………………………………………………………………………………………………. 175

Разработка кода для входа и выхода из браузера……………………………………………………………….. 182

Глава 11. Системный интерфейс WebAssembly (WASI)…………………………. 189

Системный интерфейс WebAssembly (WASI)………………………………………………………………………… 189

Безопасность на основе возможностей………………………………………………………………………………….. 198

Полная картина WebAssembly……………………………………………………………………………………………….. 202

Глава 12. Расширение платформы WebAssembly………………………………….. 207

Время выполнения WASI………………………………………………………………………………………………………… 208

Множественные возвращаемые значения……………………………………………………………………………… 212

Ссылочные типы……………………………………………………………………………………………………………………… 214

Связывание модулей……………………………………………………………………………………………………………….. 218

Тестирование функций……………………………………………………………………………………………………………. 223

Другие предложения……………………………………………………………………………………………………………….. 226

Глава 13. WebAssembly и .NET……………………………………………………………… 229

.NET и Wasmtime……………………………………………………………………………………………………………………… 230

Blazor………………………………………………………………………………………………………………………………………… 234

Платформа Uno………………………………………………………………………………………………………………………… 245

Глава 14. Использование AssemblyScript и WebAssembly………………………. 251

“Вовсе не компилятор TypeScript для WebAssembly”…………………………………………………………… 253

Простой пример……………………………………………………………………………………………………………………….. 255

Сборка “мусора” и среда выполнения AssemblyScript…………………………………………………………. 260

Стандартная библиотека ассемблера…………………………………………………………………………………… 261

Загрузчик AssemblyScript………………………………………………………………………………………………………… 262

Глава 15. Прикладной WebAssembly: в облаке и на границах………………. 267

Кратко о моем опыте работы…………………………………………………………………………………………………. 267

Наша отрасль развивается……………………………………………………………………………………………………… 269

Fastly Compute@Edge……………………………………………………………………………………………………………… 274

Krustlet………………………………………………………………………………………………………………………………………. 276

Suborbital…………………………………………………………………………………………………………………………………… 277

WasmEdge…………………………………………………………………………………………………………………………………. 279

wasmCloud………………………………………………………………………………………………………………………………… 282

Глава 16. Прикладной WebAssembly: децентрализованные приложения 287

Централизация против децентрализации……………………………………………………………………………… 287

От Bitcoin к Ethereum……………………………………………………………………………………………………………….. 289

Как вы решаете проблему, подобную проблеме остановки?………………………………………………. 291

ewasm………………………………………………………………………………………………………………………………………… 293

Polkadot…………………………………………………………………………………………………………………………………….. 295

InterPlanetary File System (IPFS)……………………………………………………………………………………………… 296

Глава 17. WebAssembly и другие языки программирования…………………. 305

TinyGo……………………………………………………………………………………………………………………………………….. 305

Artichoke……………………………………………………………………………………………………………………………………. 311

Swift…………………………………………………………………………………………………………………………………………… 312

Java……………………………………………………………………………………………………………………………………………. 315

Kotlin…………………………………………………………………………………………………………………………………………. 318

Zig………………………………………………………………………………………………………………………………………………. 318

Grain………………………………………………………………………………………………………………………………………….. 322

И что теперь?……………………………………………………………………………………………………………………………. 323

Приложение. Установка инструментов WebAssembly…………………………… 325

Установка WebAssembly Binary Toolkit (WABT)………………………………………………………………….. 325

Установка LLVM……………………………………………………………………………………………………………………… 325

Установка Emscripten………………………………………………………………………………………………………………. 326

Установка Wasm3……………………………………………………………………………………………………………………. 326

Установка Wasmtime………………………………………………………………………………………………………………. 327

Установка Wasmer…………………………………………………………………………………………………………………… 327

Установка инструментов Rust………………………………………………………………………………………………… 327

Установка инструментов .NET……………………………………………………………………………………………….. 328

Установка AssemblyScript……………………………………………………………………………………………………….. 329

Установка IPFS………………………………………………………………………………………………………………………… 329

Установка TinyGo……………………………………………………………………………………………………………………. 329

Установка Artichoke………………………………………………………………………………………………………………… 329

Установка SwiftWasm……………………………………………………………………………………………………………… 329

Установка Zig и Grain………………………………………………………………………………………………………………. 330

Предметный указатель…………………………………………………………………………. 331

Об авторе……………………………………………………………………………………………… 335

Об изображении на обложке………………………………………………………………… 336

Brian Sletten

Брайан Слеттен (Brian Sletten) – широко эрудированный программист. Разрабатывал приложения для розничной торговли, банковской сферы, издательского дела, онлайн-игр, оборонной сферы, финансов, гостиничного бизнеса и здравоохранения. За годы работы научился сочетать надёжные решения нетривиальных задач с внедрением самых передовых технологий. Именно поэтому он высоко оценивает потенциал WebAssembly.

Опубликовано

Супер бестселлер: “Python для гиков”

Python для гиков

Книга подробно рассказывает о разработке, развертывании и поддержке крупномасштабных проектов на Python. Представлены такие концепции, как итераторы, генераторы, обработка ошибок и исключений, обработка файлов и ведение журналов. Приведены способы автоматизации тестирования приложений и разработки через тестирование (TDD). Рассказано о написании приложений с использованием кластера Apache Spark для обработки больших данных, о разработке и развертывании бессерверных программ в облаке на примере Google Cloud Platform (GCP), о создании веб-приложений и REST API, использовании среды Flask. Показаны способы применения языка для создания, обучения и оценки моделей машинного обучения, а также их развертывания в облаке, описаны приемы использования Python для извлечения данных с сетевых устройств и систем управления сетью (NMS).

Для программистов

Создавайте эффективные приложения, используя лучшие практики программирования.

Гик — человек, глубоко погруженный в мир компьютерных технологий, стремящийся досконально разобраться в наиболее важных мелочах и нюансах. Эта книга написана для гиков, увлеченных программированием на Python.

Книга раскрывает методы оптимального использования Python как с точки зрения проектирования, так и реализации практических задач. В ней подробно описан жизненный цикл крупномасштабного проекта на Python, показаны различные способы создания модульной архитектуры Python-проекта. Вы изучите лучшие практики и паттерны проектирования, узнаете, как масштабировать приложения на Python, как реализовать многопроцессорность и многопоточность. Вы поймете, как можно использовать Python не только для развертывания на одной машине, но также в частных и публичных облачных средах. Вы изучите методы обработки данных, сосредоточитесь на создании микросервисов и научитесь использовать Python для автоматизации сетей и машинного обучения. Наконец, вы узнаете, как применять описанные методы и практики в веб-разработке.

Вы изучите:

  • Принципы разработки и управления сложными проектами
  • Способы автоматизации тестирования приложений и разработки через тестирование (TDD)
  • Многопоточность и многопроцессорность в Python
  • Написание приложений с использованием кластера Apache Spark для обработки больших данных
  • Разработку и развертывание бессерверных программ в облаке на примере Google Cloud Platform (GCP)
  • Создание на Python веб-приложений и REST API, использование среды Flask
  • Использование Python для извлечения данных с сетевых устройств и систем управления сетью (NMS)
  • Применение Python для анализа данных и машинного обучения

Книгу “Python для гиков” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Об авторе. 14

О рецензентах. 15

Предисловие. 16

Для кого предназначена эта книга. 16

О чем эта книга. 17

Как получить максимальную отдачу от книги. 18

Загрузка файлов с примерами кода. 18

Условные обозначения. 19

Раздел 1. Python помимо основ. 21

Глава 1. Оптимальный жизненный цикл разработки на Python. 23

Культура и сообщество Python. 23

Этапы проекта Python. 26

Стратегия процесса разработки. 27

Итерация по этапам. 28

Стремление к MVP в первую очередь. 28

Стратегия разработки для специализированных предметных областей. 29

Эффективное документирование кода Python. 32

Комментарии Python. 32

Docstring. 32

Документация на уровне функций или классов. 34

Разработка эффективной схемы именования. 35

Методы. 36

Переменные. 36

Константы. 37

Классы. 37

Пакеты. 38

Модули. 38

Соглашения об импорте. 38

Аргументы. 38

Полезные инструменты. 38

Системы контроля версий. 39

Что не стоит хранить в репозитории системы контроля версий. 39

Понимание стратегий развертывания кода. 40

Пакетная разработка. 40

Среды разработки Python. 42

IDLE. 42

Sublime Text 42

Atom.. 42

PyCharm.. 42

Visual Studio Code. 43

PyDev. 43

Spyder 43

Заключение. 43

Вопросы. 44

Дополнительные ресурсы. 44

Ответы. 44

Глава 2. Использование модулей для сложных проектов. 45

Технические требования. 46

Знакомство с модулями и пакетами. 46

Импорт модулей. 46

Оператор import 48

Оператор __import__. 52

Инструмент importlib.import_module. 52

Абсолютный и относительный импорт. 53

Загрузка и инициализация модуля. 55

Загрузка модуля. 55

Установка параметров для специальных переменных. 55

Выполнение кода. 56

Стандартные модули. 57

Написание многоразовых модулей. 58

Независимая функциональность. 58

Генерализация функционала. 59

Традиционный стиль программирования. 60

Четко определенная документация. 61

Сборка пакетов. 62

Именование. 63

Файл инициализации пакета. 63

Сборка пакета. 63

Доступ к пакетам из любого расположения. 66

Общий доступ к пакету. 70

Создание пакета в соответствии с рекомендациями PyPA.. 70

Установка из локального исходного кода с помощью pip. 73

Публикация пакета в Test PyPI 75

Установка пакета из PyPI 76

Заключение. 77

Вопросы. 77

Дополнительные ресурсы. 77

Ответы. 78

Глава 3. Расширенное объектно-ориентированное программирование
на Python. 79

Технические требования. 80

Знакомство с классами и объектами. 80

Различия между атрибутами класса и атрибутами экземпляра. 80

Конструкторы и деструкторы классов. 83

Различия между методами класса и методами экземпляра. 84

Специальные методы. 85

Принципы ООП.. 86

Инкапсуляция данных. 87

Объединение данных и действий. 87

Сокрытие информации. 89

Защита данных. 91

Традиционный подход к использованию геттеров и сеттеров. 91

Использование декоратора property. 92

Расширение классов с помощью наследования. 94

Простое наследование. 94

Множественное наследование. 96

Полиморфизм. 97

Перегрузка метода. 97

Переопределение метода. 98

Абстракция. 100

Композиция как альтернативный подход к проектированию.. 102

Утиная типизация в Python. 104

Когда не стоит использовать ООП в Python. 105

Заключение. 106

Вопросы. 106

Дополнительные ресурсы. 107

Ответы. 107

Раздел 2. Расширенные концепции программирования. 109

Глава 4. Библиотеки Python для продвинутого программирования. 111

Технические требования. 111

Введение в контейнеры данных Python. 112

Строки. 112

Списки. 113

Кортежи. 114

Словари. 114

Множества. 115

Итераторы и генераторы для обработки данных. 116

Итераторы. 116

Генераторы. 120

Обработка файлов в Python. 122

Операции с файлами. 123

Обработка ошибок и исключений. 126

Работа с исключениями в Python. 127

Вызов исключений. 129

Определение пользовательских исключений. 130

Модуль logging в Python. 131

Основные компоненты системы логирования. 132

Работа с модулем logging. 134

Что стоит и не стоит записывать в журнал. 140

Заключение. 141

Вопросы. 141

Дополнительные ресурсы. 141

Ответы. 141

Глава 5. Тестирование и автоматизация с помощью Python. 143

Технические требования. 144

Понимание различных уровней тестирования. 144

Модульное тестирование. 145

Интеграционное тестирование. 145

Системное тестирование. 145

Приемочное тестирование. 146

Работа с тестовыми фреймворками Python. 146

Работа с фреймворком unittest 148

Фреймворк тестирования pytest 157

Разработка через тестирование. 165

Красный. 165

Зеленый. 166

Рефакторинг. 166

Автоматизированная непрерывная интеграция. 167

Заключение. 168

Вопросы. 168

Дополнительные ресурсы. 168

Ответы. 169

Глава 6. Дополнительные советы и приемы Python. 170

Технические требования. 170

Расширенные приемы использования функций в Python. 171

Функции counter, itertools и zip для итерационных задач. 171

Использование методов filter, map и reduce для преобразования данных. 175

Создание лямбда-функций. 178

Внедрение одной функции в другую.. 179

Изменение поведения функции с помощью декораторов. 181

Расширенные концепции структур данных. 187

Внедрение словаря в словарь. 187

Использование включений. 190

Введение в Pandas DataFrame. 192

Операции с объектом DataFrame. 193

Сложные случаи использования DataFrame. 198

Заключение. 203

Вопросы. 204

Дополнительные ресурсы. 204

Ответы. 204

Раздел 3. Масштабирование за пределы одного потока. 205

Глава 7. Многопроцессорная обработка, многопоточность
и асинхронное программирование. 207

Технические требования. 208

Многопоточность в Python и ее ограничения. 208

Слепое пятно Python. 209

Ключевые компоненты многопоточного программирования на Python. 210

Практический пример: многопоточное приложение для загрузки файлов
с Google Диска. 218

Многопроцессорная обработка. 221

Создание нескольких процессов. 221

Обмен данными между процессами. 224

Обмен объектами между процессами. 228

Синхронизация процессов. 230

Практический пример: многопроцессорное приложение
для загрузки файлов с Google Диска. 231

Асинхронное программирование для адаптивных систем. 233

Модуль asyncio. 234

Распределение задач с помощью очередей. 236

Практический пример: асинхронное приложение для загрузки файлов
с Google Диска. 238

Заключение. 240

Вопросы. 240

Дополнительные ресурсы. 241

Ответы. 241

Глава 8. Масштабирование Python с помощью кластеров. 242

Технические требования. 243

Возможности кластеров для параллельной обработки. 243

Hadoop MapReduce. 244

Apache Spark. 246

Устойчивые распределенные наборы данных (RDD) 249

Операции с RDD.. 249

Создание RDD.. 250

PySpark для параллельной обработки данных. 251

Создание программ SparkSession и SparkContext 253

PySpark для операций с RDD.. 254

PySpark DataFrames 257

PySpark SQL. 261

Практические примеры использования Apache Spark и PySpark. 262

Пример 1: калькулятор числа π в Apache Spark. 262

Заключение. 268

Вопросы. 269

Дополнительные ресурсы. 269

Ответы. 270

Глава 9. Программирование на Python для облака. 271

Технические требования. 271

Знакомство с облачными возможностями для приложений Python. 272

Среды разработки Python для облака. 272

Облачные среды выполнения для Python. 274

Создание веб-сервисов Python для облачного развертывания. 276

Использование Google Cloud SDK.. 277

Использование веб-консоли GCP. 284

Использование Google Cloud Platform для обработки данных. 287

Введение в основы Apache Beam.. 287

Конвейеры Apache Beam.. 289

Создание конвейеров для Cloud Dataflow.. 294

Заключение. 298

Вопросы. 299

Дополнительные ресурсы. 299

Ответы. 300

Раздел 4. Python для веб-разработки, облака и сети. 301

Глава 10. Использование Python для разработки веб-приложений
и REST API 303

Технические требования. 304

Требования к веб-разработке. 304

Веб-фреймворки. 304

Пользовательский интерфейс. 305

Веб-сервер/сервер приложений. 306

База данных. 307

Безопасность. 307

API 307

Документация. 307

Знакомство с фреймворком Flask. 308

Создание базового веб-приложения с маршрутизацией. 308

Обработка запросов с разными типами HTTP-методов. 310

Отображение статического и динамического контента. 312

Извлечение параметров из HTTP-запроса. 313

Взаимодействие с системами управления базами данных. 315

Обработка ошибок и исключений в веб-приложениях. 318

Создание REST API 321

Использование Flask для REST API 322

Разработка REST API для доступа к базе данных. 324

Пример: создание веб-приложения с помощью REST API 326

Заключение. 331

Вопросы. 332

Дополнительные ресурсы. 332

Ответы. 332

Глава 11. Разработка микросервисов на Python. 334

Технические требования. 334

Введение в микросервисы. 335

Практические рекомендации по созданию микросервисов. 337

Создание приложений на базе микросервисов. 338

Варианты разработки микросервисов на Python. 339

Варианты развертывания микросервисов. 340

Разработка приложения на основе микросервисов. 341

Заключение. 352

Вопросы. 352

Дополнительные ресурсы. 352

Ответы. 353

Глава 12. Создание бессерверных функций на Python. 354

Технические требования. 355

Знакомство с бессерверными функциями. 355

Преимущества бессерверных функций. 356

Варианты использования. 356

Варианты развертывания бессерверных функций. 357

Написание бессерверных функций. 358

Создание облачной функции на основе HTTP с помощью консоли GCP. 359

Практический пример: создание приложения для уведомлений
о событиях в облачном хранилище. 363

Заключение. 367

Вопросы. 367

Дополнительные ресурсы. 367

Ответы. 367

Глава 13. Python и машинное обучение. 369

Технические требования. 370

Введение в машинное обучение. 370

Использование Python для машинного обучения. 372

Библиотеки машинного обучения в Python. 372

Рекомендации по обучающим данным. 374

Создание и оценка модели машинного обучения. 375

Процесс построения модели машинного обучения. 375

Создание примера машинного обучения. 376

Оценка модели с помощью кросс-валидации и тонкой настройки гиперпараметров. 381

Сохранение ML-модели в файл. 384

Развертывание и прогнозирование ML-модели в GCP Cloud. 385

Заключение. 388

Вопросы. 388

Дополнительные ресурсы. 388

Ответы. 389

Глава 14. Python для автоматизации сети. 390

Технические требования. 391

Введение в автоматизацию сети. 391

Плюсы и минусы автоматизации сети. 392

Варианты использования. 393

Взаимодействие с сетевыми устройствами. 394

Протоколы для взаимодействия с сетевыми устройствами. 394

Взаимодействие с сетевыми устройствами с помощью библиотек Python
на основе SSH.. 397

Взаимодействие с сетевыми устройствами с помощью NETCONF. 404

Интеграция с системами управления сетью.. 408

Использование конечных точек сервиса определения местоположения. 409

Получение токена аутентификации. 410

Получение сетевых устройств и инвентаризация интерфейсов. 411

Обновление порта на сетевом устройстве. 412

Интеграция с событийно-ориентированными системами. 414

Создание подписок для Apache Kafka. 416

Обработка событий от Apache Kafka. 417

Продление и удаление подписки. 418

Заключение. 418

Вопросы. 419

Дополнительные ресурсы. 419

Ответы. 420

 

Предметный указатель. 421

Азиф Мухаммад

Мухаммад Азиф — программный архитектор, обладающий обширным опытом в области веб-разработки, автоматизации сетей и облаков, виртуализации и машинного обучения. ,Возглавлял многие крупномасштабные проекты в различных коммерческих компаниях. В 2012 году, получил степень доктора философии в области компьютерных систем в Карлтонском университете (Оттава, Канада) и в настоящее время работает в компании Nokia в качестве ведущего специалиста.