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

Новинка: “Python для Excel”

Python для Excel

Книга посвящена автоматизации Excel с помощью языка программирования Python. Описаны дистрибутив Anaconda Python и современные средства разработки, такие как менеджеры пакетов Conda и pip, блокноты Jupyter и Visual Studio Code. Даны необходимые основы языка Python и введение в анализ данных с помощью библиотеки pandas. Приведены приемы чтения и записи файлов Excel без Excel. Рассмотрено программирование приложений Excel с помощью популярного пакета с открытым исходным кодом xlwings: автоматизация Excel, инструменты на основе технологии Python, трекер пакетов Python, а также функции, определяемые пользователем.

Электронный архив на сайте издательства содержит цветные иллюстрации к книге.

Для опытных пользователей Excel  и программистов

Современная среда для автоматизации и анализа данных

Excel — это самый популярный в мире табличный редактор, но его язык автоматизации VBA давно перестал развиваться. Python – самый востребованный язык программирования, он хорошо работает с данными и прекрасно подходит на роль языка сценариев Excel. Вот почему сочетание Excel и Python актуально и  привлекательно.

В книге показано, как эффективно интегрировать эти два мира и начать работу по автоматизации Excel с помощью Python. При этом знание Python приветствуется, но не обязательно, так как в книге есть введение во все используемые инструменты, включая вводный курс по языку Python.

  • Освойте работу с современными инструментами, включая блокноты Jupyter и Visual Studio Code.
  • Используйте pandas для сбора, очистки и анализа данных и замены типичных вычислений в Excel.
  • Автоматизируйте рутинные задачи, такие как объединение рабочих книг Excel и создание отчетов Excel.
  • Используйте xlwings для создания интерактивных инструментов Excel, использующих Python в качестве механизма вычислений.
  • Подключайте Excel к базам данных и файлам CSV и получайте данные из Интернета с помощью кода Python.
  • Используйте Python как единый инструмент для замены VBA, Power Query и Power Pivot.

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

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

Почему я написал эту книгу. 12

Кому адресована эта книга. 12

Структура книги. 13

Версии Python и Excel 14

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

Примеры использования кода. 15

Иллюстрации. 16

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

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

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

Часть I. Введение в Python.. 19

Глава 1. Зачем нужен Python для Excel?. 21

Excel как язык программирования. 22

Excel в новостях. 23

Передовые методы программирования. 24

Современный Excel 29

Python для Excel 31

Читабельность и эксплуатационная пригодность. 31

Стандартная библиотека и менеджер пакетов. 32

Научные вычисления. 34

Особенности современного языка. 35

Кросс-платформенная совместимость. 36

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

Глава 2. Среда разработки. 38

Дистрибутив Anaconda Python. 39

Установка. 39

Anaconda Prompt 40

Python REPL: интерактивная сессия Python. 43

Менеджеры пакетов: Conda и pip. 44

Среды Conda. 46

Jupyter Notebooks. 47

Запуск блокнотов Jupyter 48

Ячейки блокнота. 49

Режим редактирования и командный режим.. 51

Порядок выполнения имеет значение. 52

Завершение работы блокнотов Jupyter 52

Visual Studio Code. 53

Установка и настройка. 55

Запуск скрипта на Python. 57

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

Глава 3. Приступая к работе с Python. 63

Типы данных. 63

Объекты.. 64

Числовые типы.. 65

Логический тип данных. 67

Строки. 69

Индексирование и нарезка. 70

Индексирование. 70

Нарезка (Slicing) 71

Структуры данных. 72

Списки. 72

Словари. 75

Кортежи. 76

Множества. 77

Управление потоком.. 78

Блоки кода и оператор pass. 78

Оператор if и условные выражения. 79

Циклы for и while. 80

Анализ списков, словарей и множеств. 83

Организация кода. 84

Функции. 84

Модули и инструкция по импорту. 86

Класс datetime. 88

PEP 8: Руководство по стилю для кода Python. 90

PEP 8 и VS Code. 92

Подсказки по типам.. 93

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

Часть II. Введение в pandas. 95

Глава 4. Основы NumPy. 97

Начало работы с NumPy. 97

Массив NumPy. 97

Векторизация и транслирование. 99

Универсальные функции (ufunc) 101

Создание и манипулирование массивами. 102

Получение и установка элементов массива. 102

Полезные конструкторы массива. 103

Представления и копирование. 103

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

Глава 5. Анализ данных с помощью pandas. 105

DataFrame и Series. 105

Индекс. 108

Столбцы.. 110

Манипулирование данными. 111

Выбор данных. 111

Изменение данных. 117

Отсутствующие данные. 120

Дубликаты данных. 122

Арифметические операции. 123

Работа с текстовой колонкой. 125

Использование функции. 126

Просмотр и копирование. 127

Объединение DataFrames. 127

Объединение. 128

Объединение и слияние. 129

Описательная статистика и агрегация данных. 132

Описательная статистика. 132

Группировка. 133

Pivoting и Melting. 134

Построение графиков. 135

Matplotlib. 135

Plotly. 137

Импорт и экспорт DataFrames. 140

Экспорт CSV файлов. 141

Импорт CSV-файлов. 142

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

Глава 6. Анализ временны́х рядов с помощью pandas. 145

DatetimeIndex. 146

Создание DatetimeIndex. 146

Фильтрация DatetimeIndex. 148

Работа с часовыми поясами. 150

Общие манипуляции с временны́ми рядами. 151

Смещение и процентные изменения. 151

Пересчет и корреляция. 153

Повторная выборка. 156

Скользящее окно. 157

Ограничения при работе с pandas. 158

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

Часть III. Чтение и запись файлов Excel без Excel. 161

Глава 7. Манипулирование файлами Excel с помощью pandas. 163

Тематическое исследование: отчетность в Excel 163

Чтение и запись файлов Excel с помощью pandas. 167

Функция read_excel и класс ExcelFile. 167

Метод to_excel и класс ExcelWriter 173

Ограничения при работе pandas с файлами Excel 174

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

Глава 8. Манипулирование файлами Excel с помощью пакетов
reader и writer. 176

Пакеты reader и writer 176

В каких случаях какой пакет используется. 177

Модуль excel.py. 178

OpenPyXL. 180

XlsxWriter 184

pyxlsb. 186

xlrd, xlwt, and xlutils. 187

Работа с xlwt 189

Расширенный круг задач для reader и writer 190

Работа с большими файлами Excel 191

Форматирование данных в Excel 195

Тематическое исследование (повторное): отчетность в Excel 200

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

Часть IV. Программирование приложения Excel
с помощью xlwings. 205

Глава 9. Автоматизация Excel 205

Начало работы с xlwings. 206

Использование Excel в качестве средства просмотра данных. 206

Объектная модель Excel 208

Запуск кода VBA.. 215

Конвертеры, опции и коллекции. 216

Работа с DataFrames. 216

Конвертеры и опции. 217

Диаграммы, рисунки и определенные имена. 220

Случай из практики (повторный анализ): отчетность в Excel 223

Расширенные темы xlwings. 225

Основы xlwings. 225

Улучшение производительности. 227

Как действовать при отсутствии недостающих функций. 229

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

Глава 10. Инструменты Excel на основе технологии Python. 231

Использование Excel в качестве интерфейса xlwings. 231

Надстройка Excel 232

Команда Quickstart 233

Run Main. 234

Функция RunPython. 235

Развертывание. 240

Зависимости Python. 240

Автономные рабочие книги: избавление от надстройки xlwings. 241

Иерархия конфигурации. 242

Настройки. 243

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

Глава 11. Трекер пакетов Python. 245

Что мы будем создавать. 245

Основной функционал. 247

Web APIs. 248

Базы данных. 251

Исключения. 260

Структура приложения. 263

Внешний интерфейс. 264

Внутренний интерфейс. 268

Отладка. 271

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

Глава 12. Функции, определяемые пользователем (UDFs) 274

Начало работы с UDF. 274

UDF Quickstart 275

Тематическое исследование: Google Trends. 280

Введение в Google Trends. 280

Работа с DataFrames и динамическими массивами. 282

Получение данных из Google Trends. 287

Построение графиков с помощью UDF. 291

Отладка UDFs. 293

Дополнительные вопросы по UDF. 294

Базовая оптимизация производительности. 295

Кэширование. 297

Декоратор Sub. 299

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

Часть V. Приложения. 303

Приложение A. Среда Conda. 305

Создание новой среды Conda. 305

Отключение автоматической активации. 307

Приложение B. Расширенные функциональные возможности VS Code. 308

Отладчик. 308

Блокноты Jupyter в VS Code. 310

Запуск блокнотов Jupyter 310

Сценарии Python с ячейками кода. 311

Приложение C. Дополнительные концепции Python. 313

Классы и объекты.. 313

Работа с объектами datetime с учетом временной зоны.. 315

Изменяемые и неизменяемые объекты Python. 316

Вызов функций с изменяемыми объектами в качестве аргументов. 317

Функции с изменяемыми объектами в качестве аргументов
по умолчанию.. 319

Об авторе. 321

Обложка. 323

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

 

Зумштейн Феликс

Феликс Зумштейн — создатель xlwings, популярного пакета с открытым исходным кодом, который позволяет автоматизировать Excel с помощью Python в Windows и macOS. Как генеральный директор компании xltrail и менеджер одноименной системы контроля версий для файлов Excel, он имеет глубокое представление о типичных случаях использования и проблемах с Excel в различных областях.

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

Уже в продаже: “Проектирование систем машинного обучения”

Проектирование систем машинного обучения

егодня машинное обучение – основной практический аппарат для применения искусственного интеллекта. Книга, основанная на стэнфордском учебном курсе, не ограничивается разбором конкретных библиотек, а описывает высокоуровневый подход к разработке систем машинного обучения, который упрощает их поддержку и развитие, позволяет избежать переобучения, искажения результатов. Рассказано, как сделать новую систему машинного обучения или нейронную сеть, надёжной, репрезентативной и расширяемой, а также качественно доработать уже существующие системы. Также показано, как подобрать библиотеки и алгоритмы с учётом имеющегося множества данных и действующих бизнес-требований, конструировать признаки и отслеживать метрики.

Книга адресована программистам и специалистам по data science

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

  • Инжиниринг данных и выбор нужных метрик, помогающих правильно решить задачу
  • Автоматизация процесса, позволяющая непрерывно разрабатывать, оценивать, развёртывать и обновлять модели
  • Разработка мониторинговой системы, позволяющей быстро обнаруживать и устранять проблемы, которые могут возникать в реальном использовании
  • Выстраивание платформы машинного обучения, которая была бы применима сразу во многих практических ситуациях
  • Ответственный подход к разработке систем машинного обучения

Чем эта книга не является

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

  • Модели машинного обучения , такие как кластеризация, логистическая регрессия, деревья решений, совместная фильтрация и различные архитектуры нейронных сетей, включая упреждающую, рекуррентную, сверточную и трансформирующую.
  • Методы машинного обучения , такие как контролируемое и неконтролируемое, градиентный спуск, функция цели/потери, регуляризация, обобщение и настройка гиперпараметров.
  • Такие метрики , как точность, F1, точность, полнота, ROC, среднеквадратическая ошибка и логарифмическая вероятность.
  • Статистические концепции, такие как дисперсия, вероятность и нормальное/длинное распределение.
  • Общие задачи машинного обучения, такие как языковое моделирование, обнаружение аномалий, классификация объектов и машинный перевод.

Книга основана на стэнфордском учебном курсе

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

Отзывы о книге……………………………………………………………………………………… 13

Предисловие…………………………………………………………………………………………… 15

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

Чего вы не найдете в книге?………………………………………………………………………………………………………. 17

Навигация по книге……………………………………………………………………………………………………………………. 18

Репозиторий GitHub и сообщество…………………………………………………………………………………………… 19

Используемые обозначения………………………………………………………………………………………………………. 19

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

Платформа онлайн-обучения O’Reilly……………………………………………………………………………………… 20

Как с нами связаться?………………………………………………………………………………………………………………… 21

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

Глава 1. Обзор ML-систем……………………………………………………………………… 23

Когда использовать ML?…………………………………………………………………………………………………………… 24

Примеры использования машинного обучения………………………………………………………………………. 30

Понимание систем машинного обучения………………………………………………………………………………… 33

Машинное обучение в исследованиях и в производстве……………………………………………. 33

Различные участники процесса и их требования……………………………………………….. 34

Приоритеты вычислений……………………………………………………………………………………….. 36

Данные…………………………………………………………………………………………………………………….. 39

Объективность………………………………………………………………………………………………………… 40

Интерпретируемость……………………………………………………………………………………………… 41

Обсуждение…………………………………………………………………………………………………………….. 42

ML-системы в сравнении с традиционным ПО……………………………………………………………. 42

Итоги…………………………………………………………………………………………………………………………………………… 44

Глава 2. Введение в проектирование ML-систем……………………………………. 46

Цели для бизнеса и для ML……………………………………………………………………………………………………….. 46

Требования к ML-системам………………………………………………………………………………………………………. 49

Надежность…………………………………………………………………………………………………………………….. 49

Масштабируемость………………………………………………………………………………………………………… 50

Обслуживаемость…………………………………………………………………………………………………………… 51

Адаптивность………………………………………………………………………………………………………………….. 51

Итеративный процесс………………………………………………………………………………………………………………… 52

Формулирование ML-задач……………………………………………………………………………………………………… 54

Типы ML-задач……………………………………………………………………………………………………………….. 55

Классификация или регрессия?…………………………………………………………………………….. 55

Бинарная или мультиклассовая классификация?……………………………………………….. 56

Мультиклассовая или многометочная классификация?…………………………………….. 57

Несколько способов сформулировать задачу…………………………………………………….. 58

Целевые функции……………………………………………………………………………………………………………. 59

Разделение целей……………………………………………………………………………………………………. 60

Данные или разум?……………………………………………………………………………………………………………………. 62

Итоги…………………………………………………………………………………………………………………………………………… 64

Глава 3. Основы проектирования баз данных……………………………………….. 67

Источники данных…………………………………………………………………………………………………………………….. 68

Форматы данных……………………………………………………………………………………………………………………….. 70

JSON…………………………………………………………………………………………………………………………………. 71

Row-Major или Column-Major?……………………………………………………………………………………… 72

Текстовый формат или двоичный?……………………………………………………………………………….. 74

Модели данных………………………………………………………………………………………………………………………….. 75

Реляционная модель……………………………………………………………………………………………………….. 76

NoSQL………………………………………………………………………………………………………………………………. 79

Документальная модель………………………………………………………………………………………… 80

Графовая модель……………………………………………………………………………………………………. 81

Структурированные или неструктурированные данные?………………………………………….. 82

Хранение и обработка данных…………………………………………………………………………………………………. 84

Транзакционная и аналитическая обработка данных……………………………………………….. 84

ETL: извлечение, преобразование, загрузка………………………………………………………………… 87

Режимы потока данных…………………………………………………………………………………………………………….. 89

Передача данных через базы данных………………………………………………………………………….. 89

Передача данных через сервисы…………………………………………………………………………………… 89

Передача данных в режиме реального времени………………………………………………………….. 91

Пакетная обработка или потоковая?……………………………………………………………………………………….. 93

Итоги…………………………………………………………………………………………………………………………………………… 95

Глава 4. Обучающие данные…………………………………………………………………. 98

Семплирование………………………………………………………………………………………………………………………….. 99

Невероятностное семплирование…………………………………………………………………………………. 99

Простое случайное семплирование……………………………………………………………………………. 101

Стратифицированное семплирование………………………………………………………………………… 101

Взвешенное семплирование………………………………………………………………………………………… 101

Резервуарное семплирование……………………………………………………………………………………… 102

Семплирование по важности………………………………………………………………………………………. 103

Разметка……………………………………………………………………………………………………………………………………. 104

Ручные метки………………………………………………………………………………………………………………… 104

Множественность меток………………………………………………………………………………………. 105

Родословная данных……………………………………………………………………………………………. 106

Естественные метки……………………………………………………………………………………………………… 107

Длина петли обратной связи……………………………………………………………………………….. 109

Справляемся с недостатками меток……………………………………………………………………………. 110

Слабый контроль…………………………………………………………………………………………………. 111

Частичный контроль……………………………………………………………………………………………. 114

Трансферное обучение………………………………………………………………………………………… 115

Активное обучение………………………………………………………………………………………………. 116

Несбалансированность классов…………………………………………………………………………………………….. 118

Проблемы несбалансированности классов……………………………………………………………….. 118

Справляемся с несбалансированностью классов……………………………………………………… 120

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

Методы уровня данных: ресемплинг…………………………………………………………………. 124

Методы уровня алгоритма………………………………………………………………………………….. 125

Обучение с учетом затрат…………………………………………………………………………… 126

Потеря, сбалансированная по классу……………………………………………………….. 126

Фокальная потеря………………………………………………………………………………………… 127

Аугментация данных……………………………………………………………………………………………………………….. 128

Простые преобразования с сохранением меток………………………………………………………… 128

Возмущения…………………………………………………………………………………………………………………… 129

Синтез данных………………………………………………………………………………………………………………. 131

Итоги…………………………………………………………………………………………………………………………………………. 132

Глава 5. Конструирование признаков………………………………………………….. 135

Признаки сконструированные или автоматически генерируемые?……………………………………. 135

Общий обзор методов конструирования признаков…………………………………………………………….. 138

Обработка отсутствующих значений…………………………………………………………………………. 138

Удаление пропусков…………………………………………………………………………………………….. 140

Заполнение пропусков…………………………………………………………………………………………. 141

Масштабирование……………………………………………………………………………………………………….. 141

Дискретизация………………………………………………………………………………………………………………. 143

Кодирование категориальных признаков………………………………………………………………….. 144

Пересечение признаков………………………………………………………………………………………………… 146

Дискретный и непрерывный позиционный эмбеддинг……………………………………………… 147

Утечка данных…………………………………………………………………………………………………………………………. 149

Основные причины утечки данных…………………………………………………………………………….. 151

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

Масштабирование перед разделением………………………………………………………………. 152

Заполнение отсутствующих данных статистикой из тестовой части…………….. 152

Плохая обработка дублированных данных перед разделением…………………….. 152

Групповая утечка…………………………………………………………………………………………………. 153

Утечка из процесса генерации данных………………………………………………………………. 153

Обнаружение утечек данных………………………………………………………………………………………. 154

Конструирование хороших признаков………………………………………………………………………………….. 154

Важность признаков…………………………………………………………………………………………………….. 155

Обобщение признаков………………………………………………………………………………………………….. 157

Итоги…………………………………………………………………………………………………………………………………………. 158

Глава 6. Разработка модели и ее автономная оценка……………………………. 161

Разработка и обучение модели………………………………………………………………………………………………. 162

Оценка ML-моделей……………………………………………………………………………………………………… 162

Шесть шагов по выбору модели…………………………………………………………………………. 163

Избегайте ловушки «хочу самое новое»……………………………………………………. 164

Начните с простых моделей……………………………………………………………………….. 164

Избегайте предубеждений при выборе модели………………………………………… 165

Оценивайте хорошую производительность в сравнении с предыдущими хорошими показателями производительности……………………………………………………………………………………. 165

Проанализируйте компромиссы………………………………………………………………… 166

Поймите предположения вашей модели……………………………………………………. 167

Ансамбли………………………………………………………………………………………………………………………. 168

Бэггинг…………………………………………………………………………………………………………………… 170

Бустинг………………………………………………………………………………………………………………….. 171

Стекинг………………………………………………………………………………………………………………….. 172

Отслеживание экспериментов и управление версиями…………………………………………….. 173

Отслеживание экспериментов…………………………………………………………………………….. 173

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

Отладка ML-моделей…………………………………………………………………………………………… 176

Распределенное обучение……………………………………………………………………………………………. 179

Параллелизм данных…………………………………………………………………………………………… 180

Параллелизм моделей………………………………………………………………………………………….. 181

AutoML………………………………………………………………………………………………………………………….. 183

Программная часть AutoML: настройка гиперпараметров…………………………….. 183

Аппаратная часть AutoML: архитектурный поиск и оптимизаторы обучения 185

Четыре этапа разработки ML-модели………………………………………………………………………… 186

Этап 1. До машинного обучения………………………………………………………………………… 187

Этап 2. Простейшие ML-модели…………………………………………………………………………. 187

Этап 3. Оптимизация простых моделей……………………………………………………………… 188

Этап 4. Сложные модели…………………………………………………………………………………….. 188

Автономная оценка модели…………………………………………………………………………………………………….. 188

Базовые конфигурации………………………………………………………………………………………………… 189

Методы оценки……………………………………………………………………………………………………………… 191

Тест на возмущение……………………………………………………………………………………………… 191

Тест на инвариантность………………………………………………………………………………………. 192

Тест на ожидаемые изменения……………………………………………………………………………. 192

Калибровка модели……………………………………………………………………………………………… 193

Оценка достоверности…………………………………………………………………………………………. 194

Оценка на основе срезов……………………………………………………………………………………… 195

Итоги…………………………………………………………………………………………………………………………………………. 198

Глава 7. Развертывание модели и совершенствование
ее сервиса прогнозирования…………………………………………………………………. 201

Мифы о развертывании ML……………………………………………………………………………………………………. 203

Миф 1: вы можете развертывать только одну или две модели за раз……………………… 203

Миф 2: если мы ничего не делаем, производительность модели
остается такой же…………………………………………………………………………………………………………. 204

Миф 3: нет нужды в частом обновлении модели………………………………………………………. 205

Миф 4: большинству ML-инженеров не нужно беспокоиться
о масштабировании……………………………………………………………………………………………………… 205

Пакетное прогнозирование или онлайн-прогнозирование?………………………………………………… 206

От пакетного прогнозирования к онлайн-прогнозированию……………………………………. 209

Объединение пакетного и потокового конвейеров……………………………………………………. 211

Сжатие модели…………………………………………………………………………………………………………………………. 213

Низкоранговая факторизация……………………………………………………………………………………… 214

Дистилляция знаний…………………………………………………………………………………………………….. 215

Прунинг…………………………………………………………………………………………………………………………. 215

Квантизация………………………………………………………………………………………………………………….. 216

ML в облаке и на периферийных устройствах……………………………………………………………………… 218

Компиляция и оптимизация модели под граничные устройства……………………………… 220

Оптимизация модели……………………………………………………………………………………………. 222

Использование ML для оптимизации ML………………………………………………………….. 224

ML в браузерах…………………………………………………………………………………………………………….. 227

Итоги…………………………………………………………………………………………………………………………………………. 228

Глава 8. Сдвиги в распределении данных и мониторинг……………………… 232

Причины сбоев ML-систем……………………………………………………………………………………………………… 233

Сбои программной системы………………………………………………………………………………………… 234

Сбои, характерные для ML…………………………………………………………………………………………. 235

Данные в производстве отличаются от данных при обучении……………………….. 235

Граничные случаи……………………………………………………………………………………………….. 237

Вырожденные петли обратной связи…………………………………………………………………. 238

Обнаружение вырожденных петель обратной связи……………………………….. 240

Исправление вырожденных петель обратной связи…………………………………. 240

Сдвиги в распределении данных……………………………………………………………………………………………. 242

Типы сдвигов данных…………………………………………………………………………………………………… 242

Ковариационный сдвиг……………………………………………………………………………………….. 243

Сдвиг меток…………………………………………………………………………………………………………… 245

Концептуальный дрейф……………………………………………………………………………………….. 245

Общие сдвиги в распределении данных…………………………………………………………………….. 246

Обнаружение сдвигов в распределении данных……………………………………………………….. 247

Статистические методы………………………………………………………………………………………. 247

Временные рамки окон для обнаружения сдвигов……………………………………………. 249

Устранение сдвигов распределения данных……………………………………………………………… 252

Мониторинг и наблюдаемость……………………………………………………………………………………………….. 254

Специфичные для мониторинга ML метрики…………………………………………………………….. 255

Мониторинг метрик, связанных с точностью……………………………………………………. 255

Мониторинг прогнозов………………………………………………………………………………………… 256

Мониторинг признаков………………………………………………………………………………………… 257

Мониторинг сырых данных………………………………………………………………………………… 259

Инструменты мониторинга………………………………………………………………………………………….. 260

Журналы……………………………………………………………………………………………………………….. 260

Информационные панели……………………………………………………………………………………. 261

Оповещения…………………………………………………………………………………………………………… 262

Наблюдаемость……………………………………………………………………………………………………………. 263

Итоги…………………………………………………………………………………………………………………………………………. 265

Глава 9. Непрерывное обучение и тестирование в производстве………….. 268

Непрерывное обучение…………………………………………………………………………………………………………… 269

Переобучение без сохранения состояния или обучение с его сохранением?…………. 270

Почему нужно непрерывное обучение?……………………………………………………………………… 272

Проблемы непрерывного обучения…………………………………………………………………………….. 274

Доступ к свежим данным…………………………………………………………………………………….. 274

Оценка…………………………………………………………………………………………………………………… 276

Алгоритмы…………………………………………………………………………………………………………….. 277

Четыре этапа непрерывного обучения……………………………………………………………………….. 278

Этап 1: ручное переобучение без сохранения состояния………………………………… 278

Этап 2: автоматизированное переобучение……………………………………………………… 279

Требования…………………………………………………………………………………………………… 280

Этап 3: автоматизированное обучение с сохранением состояния………………….. 281

Требования…………………………………………………………………………………………………… 281

Этап 4: непрерывное обучение…………………………………………………………………………… 282

Требования…………………………………………………………………………………………………… 282

Как часто надо обновлять модели?……………………………………………………………………………. 282

Ценность свежих данных…………………………………………………………………………………….. 283

Итерация данных или итерация моделей?…………………………………………………………. 284

Тестирование в производстве…………………………………………………………………………………………………. 284

Теневое развертывание………………………………………………………………………………………………… 285

A/B-тестирование…………………………………………………………………………………………………………. 286

Канареечный релиз………………………………………………………………………………………………………. 287

Тестирование чередованием……………………………………………………………………………………….. 288

Бандиты…………………………………………………………………………………………………………………………. 290

Контекстные бандиты как стратегия исследования…………………………………………. 291

Итоги…………………………………………………………………………………………………………………………………………. 293

Глава 10. Инфраструктура и инструменты для MLOps…………………………. 296

Хранение и вычисление…………………………………………………………………………………………………………… 299

Публичное облако или собственный ЦОД?……………………………………………………………….. 302

Среда разработки……………………………………………………………………………………………………………………. 305

Настройка среды разработки……………………………………………………………………………………… 305

IDE…………………………………………………………………………………………………………………………. 306

Стандартизация среды разработки……………………………………………………………………………. 308

От разработки к производству: контейнеры………………………………………………………………. 310

Управление ресурсами……………………………………………………………………………………………………………. 313

Cron, планировщик и оркестратор……………………………………………………………………………… 313

Управление рабочим процессом обработки данных………………………………………………… 316

ML-платформа…………………………………………………………………………………………………………………………. 321

Развертывание модели…………………………………………………………………………………………………. 322

Хранилища моделей…………………………………………………………………………………………………….. 323

Хранилища признаков…………………………………………………………………………………………………. 327

Создать или купить?…………………………………………………………………………………………………….. 329

Итоги…………………………………………………………………………………………………………………………………………. 331

Глава 11. Человеческая сторона машинного обучения…………………………. 334

Пользовательский опыт…………………………………………………………………………………………………………… 334

Обеспечение согласованности……………………………………………………………………………………. 335

Борьба с «преимущественно верными» прогнозами…………………………………………………. 335

Система бэкапов…………………………………………………………………………………………………………… 337

Структура команды…………………………………………………………………………………………………………………. 337

Кросс-функциональное взаимодействие между командами…………………………………….. 338

«Универсальные» специалисты по обработке данных…………………………………………….. 339

Подход 1: создание отдельных команд для управления процессами…………….. 339

Подход 2: специалисты по обработке данных управляют всем процессом…… 340

Ответственный ИИ…………………………………………………………………………………………………………………… 342

Безответственный ИИ: исследования инцидентов…………………………………………………….. 343

Пример 1: предвзятость автоматизированной оценки……………………………………… 344

Провал 1: постановка неправильной цели………………………………………………… 345

Провал 2: недостаточная оценка присущих модели предубеждений……. 345

Провал 3: отсутствие прозрачности………………………………………………………….. 346

Пример 2: опасность «анонимизированных» данных………………………………………. 347

Советы по созданию ответственного ИИ……………………………………………………………………. 349

Выясните источники искажений модели……………………………………………………………. 349

Поймите ограничения подхода, основанного на данных………………………………… 351

Оцените компромиссы между разными пожеланиями……………………………………… 351

Продумывайте всё заранее………………………………………………………………………………….. 352

Создайте карточки моделей………………………………………………………………………………… 353

Установите процессы для смягчения смещений………………………………………………… 354

Будьте в курсе тенденций ответственного ИИ…………………………………………………… 355

Итоги…………………………………………………………………………………………………………………………………………. 355

Заключение………………………………………………………………………………………….. 358

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

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

Об обложке…………………………………………………………………………………………… 366

Чип Хьюен

Чип Хьюен – основательница компании Claypot AI. Занималась разработкой систем машинного обучения в компаниях NVIDIA, Snorkel AI, Netflix, Primer, преподаёт в Стэнфордском университете курс CS 329S по проектированию систем машинного обучения.

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

Встречайте: “Excel для школьников. Практикум”

Excel для школьников. Практикум

Описание

Практическое пособие по использованию Excel для решения задач, типичных для разных сфер деятельности школьника. Двигаясь от задачи к задаче, читатель уясняет принципы работы электронных таблиц и осваивает нужные инструменты. Теория изложена просто, сопровождается примерами, авторскими рисунками, заданиями практикума. Ученики 8-9 классов научатся выполнять расчёты, оформлять таблицы по стандартам, строить диаграммы для презентаций, выполнять задания ОГЭ. Ученики 10-11 классов освоят решение задач ЕГЭ, выработают умение видеть за постановкой задачи структуры данных, что понадобится в будущем и программисту, и системному аналитику, и менеджеру. А в качестве бонуса смогут познакомиться с решением оптимизационных задач с помощью Excel.

Электронный архив на сайте издательства содержит необходимые для работы файлы.

Для школьников 8-11 классов, учащихся средних специальных учебных заведений  и преподавателей

Практическое пособие по использованию Excel для решения задач, типичных для разных сфер деятельности школьника.

Электронная таблица нужна сегодняшнему школьнику не только для ЕГЭ и ОГЭ. Эффективной работы с информацией требуют от него и повседневная жизнь, и хобби, и подработки. Excel — полезнейший универсальный инструмент, вполне доступный старшекласснику.

Первые четыре главы книги вполне покрывают повседневные потребности школьника: выполнить расчёты для проекта, оформить по стандартам таблицы в докладе, сделать убедительные диаграммы для презентации и, разумеется, выполнить задания ОГЭ.

Следующие три главы – это и уровень ЕГЭ, и выработка умения видеть за постановкой задачи структуры данных (а оно нужно и программисту, и системному аналитику, и менеджеру). Последняя глава демонстрирует одну из впечатляющих возможностей Excel — решение оптимизационных задач. Это уже уровень повыше школьного.

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

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

Крылова Елена Геннадьевна – преподаватель Высшей инженерной школы Санкт-Петербургского Политехнического университета Петра Великого (Академия информатики для школьников), автор книг «Нескучная информатика: теория в историях, задачи, тесты, лайфхаки», «Python для детей, которые пока не программируют», курсов для детей и взрослых, организатор олимпиад по информатике и программированию, интеллектуальных игр, квестов. Сфера профессиональных интересов — методики обучения работе с информацией и программированию, адаптация образовательного контента к особенностям восприятия современных школьников.

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

Новая книга: “Python, Django и Bootstrap для начинающих”

Python, Django и Bootstrap для начинающих

Книга посвящена вопросам разработки веб-приложений с использованием языка Python, фреймворков Django, Bootstrap и интерактивной среды разработки PyCharm. Рассмотрены основные технологии и рабочие инструменты создания веб-приложений. Описаны фреймворки Django, Bootsrtap и структура создаваемых веб-приложений. На простых примерах показана обработка и маршрутизация запросов пользователей, формирование ответных веб-страниц. Рассмотрено создание шаблонов веб-страниц и форм для пользователей. Показано взаимодействие пользователей с различными типами баз данных через модели. Описана работа с базами данных через встроенные в Django классы без использования SQL-запросов. Приведен пошаговый пример создания сайта от его проектирования, до формирования программных модулей и развертывания сайта в Интернете с базами данных SQLite и MySQL. Электронный архив на сайте издательства содержит коды всех примеров.

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

ОСВАИВАЕМ СОВРЕМЕННЫЙ И УДОБНЫЙ ИНСТРУМЕНТАРИЙ ДЛЯ СОЗДАНИЯ ВЕБ-ПРИЛОЖЕНИЙ

• Веб-технологии
• Инструментальные средства для разработки веб-приложений
• Знакомство с фреймворком Django
• Знакомство с фреймворком Bootstrap
• Интерактивная среда разработки PyCharm
• Обработка и маршрутизация запросов
• Шаблоны веб-страниц
• Формы и модели данных
• Веб-сайт и веб-интерфейс для пользователей
• Встроенная панель для администрирования сайта
• Пользовательские формы
• Публикация сайта в Интернете

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

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

Глава 1. Инструментальные средства для разработки веб-приложений…. 15

1.1. Интерпретатор Python………………………………………………………………………………………………………… 16

1.1.1. Установка Python в Windows…………………………………………………………………………………… 17

1.1.2. Установка Python в Linux………………………………………………………………………………………… 20

1.1.3. Проверка интерпретатора Python…………………………………………………………………………… 20

1.2. Интерактивная среда разработки программного кода PyCharm…………………………………… 21

1.2.1. Установка PyCharm в Windows……………………………………………………………………………….. 22

1.2.2. Установка PyCharm в Linux…………………………………………………………………………………….. 24

1.2.3. Проверка PyCharm……………………………………………………………………………………………………. 25

1.3. Установка пакетов в Python с использованием менеджера пакетов pip………………………… 28

1.3.1. Репозиторий пакетов программных средств PyPI…………………………………………………. 28

1.3.2. pip — менеджер пакетов в Python……………………………………………………………………………. 29

1.3.3. Использование менеджера пакетов pip…………………………………………………………………… 30

1.4. Фреймворк Django для разработки веб-приложений………………………………………………………. 31

1.5. Менеджер баз данных SQLiteStudio………………………………………………………………………………….. 35

1.6. Краткие итоги……………………………………………………………………………………………………………………… 37

Глава 2. Веб-технологии и базовые сведения об HTML………………………….. 39

2.1. Базовые сведения о веб-технологиях………………………………………………………………………………… 39

2.1.1. Технологии клиентского программирования…………………………………………………………. 41

2.1.2. Технологии серверного программирования…………………………………………………………… 42

2.1.3. Фреймворки Django и Bootstrap для разработки веб-приложений………………………. 43

2.2. Базовые сведения о HTML…………………………………………………………………………………………………. 45

2.2.1. Теги для представления текста на HTML-страницах…………………………………………… 47

2.2.2. Списки……………………………………………………………………………………………………………………….. 49

2.2.3. Таблицы…………………………………………………………………………………………………………………….. 51

2.2.4. Тег div………………………………………………………………………………………………………………………… 55

2.2.5. Гиперссылки……………………………………………………………………………………………………………… 56

2.3. Каскадные таблицы стилей (CSS)……………………………………………………………………………………… 56

2.4. Возможности использования JavaScript……………………………………………………………………………. 58

2.5. Краткие итоги……………………………………………………………………………………………………………………… 60

Глава 3. Макетирование HTML-страниц с фреймворком Bootstrap……….. 61

3.1. Технологические возможности фреймворка Bootstrap……………………………………………………. 61

3.2. Получение файлов фреймворка Bootstrap………………………………………………………………………… 63

3.3. Контейнеры и сетка Bootstrap……………………………………………………………………………………………. 66

3.3.1. Адаптивные контейнеры………………………………………………………………………………………….. 67

3.3.2. Ряды или строки (row)………………………………………………………………………………………………. 69

3.3.3. Адаптивные блоки (col)……………………………………………………………………………………………. 69

3.3.4. Адаптивные блоки без указания числа колонок……………………………………………………. 71

3.3.5. Расположение адаптивных блоков…………………………………………………………………………. 71

3.4. Верстка макета HTML-страниц………………………………………………………………………………………… 72

3.5. Подключение файлов фреймворка Bootstrap к проекту………………………………………………….. 75

3.6. Задание цвета элементам HTML-страниц……………………………………………………………………….. 77

3.7. Задание отступов элементам макета HTML-страниц…………………………………………………….. 80

3.8. Выравнивание содержимого в адаптивных блоках HTML-страниц……………………………… 84

3.9. Обозначение границ элементов макета HTML-страниц…………………………………………………. 86

3.10. Пример использования адаптивных контейнеров…………………………………………………………. 93

3.11. Таблицы Bootstrap……………………………………………………………………………………………………………. 97

3.12. Краткие итоги………………………………………………………………………………………………………………….. 102

Глава 4. Знакомимся с фреймворком Django………………………………………… 103

4.1. Общие представления о Django……………………………………………………………………………………….. 103

4.2. Структура приложений на Django………………………………………………………………………………….. 105

4.3. Первый проект на Django…………………………………………………………………………………………………. 107

4.4. Первое приложение на Django…………………………………………………………………………………………. 115

4.5. Краткие итоги……………………………………………………………………………………………………………………. 121

Глава 5. Представления и маршрутизация…………………………………………… 123

5.1. Обработка запросов пользователей……………………………………………………………………………….. 123

5.2. Маршрутизация запросов пользователей в функциях path и re_path…………………………. 126

5.3. Очередность маршрутов………………………………………………………………………………………………….. 129

5.4. Основные элементы синтаксиса регулярных выражений…………………………………………….. 129

5.5. Параметры представлений………………………………………………………………………………………………. 130

5.5.1. Определение параметров через функцию re_path()…………………………………………….. 130

5.5.2. Определение параметров через функцию path()………………………………………………….. 134

5.5.3. Определение параметров по умолчанию в функции path()………………………………… 136

5.6. Параметры строки запроса пользователя………………………………………………………………………. 137

5.7. Переадресация и отправка пользователю статусных кодов………………………………………… 140

5.7.1. Переадресация………………………………………………………………………………………………………… 140

5.7.2. Отправка пользователю статусных кодов…………………………………………………………… 142

5.8. Краткие итоги……………………………………………………………………………………………………………………. 144

Глава 6. Шаблоны в Django…………………………………………………………………. 145

6.1. Создание простейшего шаблона…………………………………………………………………………………….. 145

6.2. Создание каталога для шаблонов приложений…………………………………………………………….. 152

6.3. Класс TemplateResponse…………………………………………………………………………………………………… 155

6.4. Язык шаблонов (DTL)……………………………………………………………………………………………………….. 156

6.5. Передача данных в шаблоны через переменные…………………………………………………………… 158

6.6. Передача в шаблон сложных данных……………………………………………………………………………. 161

6.7. Использование тегов в шаблонах Django……………………………………………………………………….. 163

6.8. Статические файлы в шаблонах Django…………………………………………………………………………. 172

6.8.1. Основы каскадных таблиц стилей………………………………………………………………………… 172

6.8.2. Использование статических файлов в шаблонах Django…………………………………… 176

6.9. Использование класса TemplateView для вызова шаблонов HTML-страниц……………… 182

6.10. Наследование шаблонов……………………………………………………………………………………………….. 187

6.11. Создание многостраничного сайта на основе шаблонов Django………………………………. 190

6.12. Формирование URL-адресов в шаблонах Django……………………………………………………….. 197

6.13. Интеграция шаблонов Django с фреймворком Bootstrap…………………………………………….. 200

6.14. Использование специальных тегов в шаблонах Django……………………………………………… 203

6.14.1. Тег для вывода текущей даты и времени……………………………………………………………. 203

6.14.2. Теги Bootstrap для вывода информации в адаптивных блоках……………………….. 205

6.14.3. Теги Bootstrap и Django для представления списков в виде таблицы……………… 207

6.15. Краткие итоги………………………………………………………………………………………………………………….. 209

Глава 7. Формы……………………………………………………………………………………. 211

7.1. Процесс управления формами в Django………………………………………………………………………….. 211

7.2. Определение форм…………………………………………………………………………………………………………….. 214

7.3. Использование полей в формах Django………………………………………………………………………….. 220

7.3.1. Настройка среды для изучения полей разных типов………………………………………….. 220

7.3.2. Типы полей в формах Django и их общие параметры…………………………………………. 222

7.3.3. Поле BooleanField для выбора решения: да/нет…………………………………………………. 225

7.3.4. Поле CharField для ввода текста………………………………………………………………………….. 226

7.3.5. Поле ChoiceField для выбора данных из списка…………………………………………………. 228

7.3.6. Поле DateField для ввода даты……………………………………………………………………………… 229

7.3.7. Поле DateTimeField для ввода даты и времени……………………………………………………. 230

7.3.8. Поле DecimalField для ввода десятичных чисел…………………………………………………. 230

7.3.9. Поле DurationField для ввода промежутка времени…………………………………………… 232

7.3.10. Поле EmailField для ввода электронного адреса………………………………………………. 233

7.3.11. Поле FileField для выбора файлов……………………………………………………………………… 234

7.3.12. Поле FilePathField для создания списка файлов………………………………………………. 235

7.3.13. Поле FloatField для ввода чисел с плавающей точкой…………………………………….. 238

7.3.14. Поле GenericIPAddressField для ввода IP-адреса……………………………………………… 238

7.3.15. Поле ImageField для выбора файлов изображений…………………………………………… 239

7.3.16. Поле IntegerField для ввода целых чисел…………………………………………………………… 240

7.3.17. Поле JsonField для данных формата JSON………………………………………………………… 241

7.3.18. Поле MultipleChoiceField для выбора данных из списка…………………………………. 243

7.3.19. Поле NullBooleanField для выбора решения: да/нет………………………………………… 244

7.3.20. Поле RegexField для ввода текста………………………………………………………………………. 245

7.3.21. Поле SlugField для ввода текста…………………………………………………………………………. 246

7.3.22. Поле TimeField для ввода времени……………………………………………………………………… 246

7.3.23. Поле TypedChoiceField для выбора данных из списка……………………………………… 247

7.3.24. Поле TypedMultipleChoiceField для выбора данных из списка……………………….. 248

7.3.25. Поле URLField для ввода универсального указателя ресурса (URL)……………… 250

7.3.26. Поле UUIDField для ввода универсального уникального идентификатора UUID 251

7.4. Встроенные классы для создания сложных полей………………………………………………………… 252

7.4.1. Поле ComboField для ввода текста с проверкой соответствия заданным форматам……….. 252

7.4.2. Поле MultiValueField для создания сложных компоновок из нескольких полей 253

7.4.3. Поле SplitDateTimeField для раздельного ввода даты и времени………………………. 254

7.5. Настройка формы и ее полей…………………………………………………………………………………………… 255

7.5.1. Изменение внешнего вида поля с помощью параметра widget………………………….. 255

7.5.2. Задание начальных значений полей с помощью свойства initial……………………… 257

7.5.3. Задание порядка следования полей на форме…………………………………………………….. 258

7.5.4. Задание подсказок к полям формы……………………………………………………………………….. 259

7.5.5. Настройки вида формы………………………………………………………………………………………….. 260

7.5.6. Проверка (валидация) данных………………………………………………………………………………. 262

7.5.7. Детальная настройка полей формы……………………………………………………………………… 267

7.5.8. Присвоение стилей полям формы………………………………………………………………………….. 270

7.6. Использование в формах POST-запросов для отправки данных на сервер…………………. 275

7.7. Краткие итоги……………………………………………………………………………………………………………………. 278

Глава 8. Модели данных Django…………………………………………………………… 279

8.1. Создание моделей и миграции базы данных………………………………………………………………….. 280

8.2. Типы полей в модели данных Django……………………………………………………………………………… 284

8.3. Манипуляция с данными в Django на основе CRUD……………………………………………………… 287

8.3.1. Добавление данных в БД……………………………………………………………………………………….. 287

8.3.2. Чтение данных из БД……………………………………………………………………………………………… 288

Метод get()……………………………………………………………………………………………………………… 288

Метод get_or_create()……………………………………………………………………………………………. 288

Метод all()………………………………………………………………………………………………………………. 289

Метод count()………………………………………………………………………………………………………….. 289

Метод filter()…………………………………………………………………………………………………………… 289

Метод exclude()………………………………………………………………………………………………………. 289

Метод in_bulk()………………………………………………………………………………………………………. 289

8.3.3. Обновление данных в БД……………………………………………………………………………………….. 290

8.3.4. Удаление данных из БД…………………………………………………………………………………………. 291

8.3.5. Просмотр строки SQL-запроса к базе данных…………………………………………………….. 291

8.4. Общие принципы взаимодействия форм с моделями данных и шаблонами Django…… 292

8.4.1. Создание форм на основе классов Form и ModelForm………………………………………… 293

8.4.2. Связывание форм с представлениями (view)………………………………………………………… 294

8.4.3. Связывание представлений (view) с шаблонами форм……………………………………….. 295

8.5. Организация связей между таблицами в БД через модели данных……………………………… 296

8.5.1. Организация связей между таблицами «один ко многим»………………………………….. 296

8.5.2. Организация связей между таблицами «многие ко многим»………………………………. 301

8.5.3. Организация связей между таблицами «один к одному»……………………………………. 305

8.6. Пример работы с объектами модели данных (чтение и запись информации в БД)……. 308

8.7. Пример работы с объектами модели данных: редактирование и удаление информации из БД   315

8.8. Работа с изображениями и файлами в формах Django………………………………………………….. 321

8.8.1. Загрузка изображений……………………………………………………………………………………………. 321

8.8.2. Загрузка и отображение файлов PDF в формах Django………………………………………. 332

8.8.3. Загрузка и отображение видеофайлов в формах Django……………………………………. 339

8.8.4. Загрузка и озвучивание аудиофайлов в формах Django…………………………………….. 348

8.9. Краткие итоги……………………………………………………………………………………………………………………. 356

Глава 9. Пример создания веб-сайта на Django…………………………………….. 357

9.1. Создание структуры сайта при помощи Django……………………………………………………………. 357

9.2. Установка дополнительных пакетов и настройка параметров сайта «Мир книг»…….. 366

9.3. Разработка структуры моделей данных сайта «Мир книг»………………………………………….. 370

9.4. Основные элементы моделей данных в Django……………………………………………………………… 373

9.4.1. Поля и их аргументы в моделях данных………………………………………………………………. 373

9.4.2. Метаданные в моделях Django……………………………………………………………………………… 376

9.4.3. Методы в моделях Django……………………………………………………………………………………… 377

9.4.4. Методы работы с данными в моделях Django…………………………………………………….. 377

9.5. Формирование моделей данных для сайта «Мир книг»………………………………………………… 379

9.5.1. Модель для хранения жанров книг……………………………………………………………………….. 380

9.5.2. Модель для хранения языков книг………………………………………………………………………… 381

9.5.3. Модель для хранения наименования издательства…………………………………………….. 381

9.5.4. Модель для хранения авторов книг………………………………………………………………………. 382

9.5.5. Модель для хранения книг…………………………………………………………………………………….. 382

9.5.6. Модель для хранения отдельных экземпляров книг и их статуса……………………… 387

9.6. Административная панель Django Admin………………………………………………………………………. 391

9.6.1. Регистрация моделей данных в Django Admin…………………………………………………….. 391

9.6.2. Работа с данными в Django Admin……………………………………………………………………….. 392

9.7. Изменение конфигурации административной панели Django………………………………………. 402

9.7.1. Регистрация класса ModelAdmin…………………………………………………………………………… 403

9.7.2. Настройка отображения списков………………………………………………………………………….. 404

9.7.3. Добавление фильтров к спискам…………………………………………………………………………… 407

9.7.4. Формирование макета с подробным представлением элемента списка…………… 409

9.7.5. Разделение страницы на секции с отображением связанной информации……….. 411

9.7.6. Встроенное редактирование связанных записей………………………………………………… 412

9.8. Работа с файлами и изображениями в административной панели Django…………………. 416

9.9. Краткие итоги……………………………………………………………………………………………………………………. 422

Глава 10. Пример создания веб-интерфейса для пользователей сайта
«Мир книг»………………………………………………………………………………………….. 423

10.1. Последовательность создания пользовательских страниц сайта «Мир книг»…………. 423

10.2. Определение перечня и URL-адресов страниц сайта «Мир книг»……………………………… 424

10.3. Создание главной страницы сайта «Мир книг»…………………………………………………………… 425

10.3.1. Создание URL-преобразования………………………………………………………………………… 425

10.3.2. Создание упрощенного представления (view)…………………………………………………. 427

10.3.3. Изменение представления (view) главной страницы сайта…………………………….. 432

10.3.4. Модификация шаблона главной страницы сайта «Мир книг»………………………. 433

10.4. Создание страницы со списком книг на основе класса ListView………………………………… 438

10.5. Создание страницы с детальной информацией о книге на основе класса DetailView 443

10.6. Постраничный вывод большого числа записей из БД (класс Paginator)………………….. 448

10.7. Создание страницы со списком авторов на основе класса ListView………………………….. 453

10.8. Создание страницы с детальной информацией об авторе книги на основе
класса DetailView……………………………………………………………………………………………………………. 456

10.9. Создание страниц О компании и Контакты…………………………………………………………………. 460

10.10. Краткие итоги……………………………………………………………………………………………………………….. 468

Глава 11. Расширение возможностей администрирования сайта
«Мир книг» и создание пользовательских форм…………………………………… 469

11.1. Сессии в Django………………………………………………………………………………………………………………. 470

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

11.2.1. Немного об аутентификации пользователей в Django……………………………………. 474

11.2.2. Создание отдельных пользователей и групп пользователей…………………………. 475

11.2.3. Создание страницы регистрации пользователя при входе на сайт………………. 481

11.2.4. Создание страницы для сброса пароля пользователя……………………………………. 486

11.3. Настройка почты для отправки сообщения о смене пароля на реальный электронный адрес  494

11.4. Поверка подлинности входа пользователя в систему…………………………………………………. 499

11.5. Формирование страниц сайта для создания заказов на книги…………………………………… 502

11.6. Работа с формами…………………………………………………………………………………………………………… 512

11.6.1. Краткий обзор форм в Django……………………………………………………………………………. 512

11.6.2. Управление формами в Django………………………………………………………………………….. 514

11.6.3. Форма для ввода и обновления информации об авторах книг на основе класса Form() 515

11.6.4. Форма для обновления информации об авторах книг на основе класса ModelForm()     527

11.6.5. Форма для ввода и обновления информации о книгах на основе класса ModelForm()    533

11.7. Краткие итоги………………………………………………………………………………………………………………….. 545

Глава 12. Публикация сайта в сети Интернет………………………………………. 547

12.1. Подготовка инфраструктуры сайта перед публикацией в сети Интернет………………… 547

12.1.1. Окружение развертывания сайта в сети Интернет………………………………………….. 548

12.1.2. Выбор хостинг-провайдера………………………………………………………………………………. 549

12.2. Подготовка веб-сайта к публикации…………………………………………………………………………….. 550

12.3. Размещение веб-сайта на хостинге timeweb…………………………………………………………………. 552

12.3.1. Регистрация аккаунта пользователя………………………………………………………………… 552

12.3.2. Административная панель хостинга timeweb………………………………………………….. 555

12.3.3. Создание на сервере папки для нового сайта………………………………………………….. 559

12.3.4. Создание на сервере виртуального окружения и приложения Django для нового сайта               567

12.3.5. Перенос сайта с рабочего компьютера на удаленный сервер……………………….. 574

12.3.6. Смена временного доменного имени на постоянное………………………………………. 579

12.4. Краткие итоги………………………………………………………………………………………………………………….. 581

Глава 13. Приложения Django и MySQL………………………………………………. 583

13.1. Подготовка инфраструктуры сайта для перехода на MySQL……………………………………. 583

13.2. Инсталляция сервера MySQL………………………………………………………………………………………… 584

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

13.4. Создание проекта Django с базой данных MySQL на локальном компьютере………… 588

13.5. Создание инфраструктуры на удаленном сервере для сайта с базой данных на MySQL……….. 591

13.6. Создание базы данных MySQL на удаленном сервере………………………………………………. 599

13.7. Перенос сайта с локального компьютера на публичный сервер……………………………….. 603

13.8. Краткие итоги………………………………………………………………………………………………………………….. 611

Послесловие…………………………………………………………………………………………. 613

Список источников и литературы………………………………………………………… 614

Приложение. Описание электронного архива………………………………………. 617

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

Постолит

Постолит Анатолий Владимирович – доктор технических наук, профессор, академик Российской академии транспорта, лауреат Всероссийского конкурса «Инженер года». Профессиональный программист, автор книг компьютерной тематики, в том числе «Python, Django и PyCharm для начинающих», и более 100 научных публикаций. Преподавал в Московском государственном автомобильно-дорожном техническом университете  (МАДИ). Занимался разработкой и внедрением информационных систем для транспортного комплекса Москвы и Московской области,  для транспортного обслуживания зимних Олимпийских игр в г. Сочи, систем оплаты проезда и информирования пассажиров городского общественного транспорта. Специализируется на создании информационных систем на основе MS SQL Server, MS Visual Studio, Bluetooth-технологий, а также систем искусственного интеллекта, обработки изображений и компьютерного зрения.

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

Встречайте новинку: “Python. 12 уроков для начинающих”

Python. 12 уроков для начинающих

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

Для начинающих программистов

Основы программирования и базовые конструкции языка Python.

Python используется как в коммерческих проектах, так и для обучения новичков программированию. Кроме того, он наиболее удобен для сдачи ЕГЭ по информатике. На практических примерах, подробно рассмотренных в отдельных уроках, читатель изучит основные конструкции Python, освоит базовые приемы и стили программирования. Решение каждой задачи приводится в книге пошагово — так, как разработчики пишут программы в реальности. Подробные разборы задач и описания алгоритмов основаны на практических занятиях автора со своими учениками. С помощью этой книги читатель не только изучит язык Python, но и научится программировать, что, как показывает практика, совсем не одно и то же.

  • Изучите основные языковые конструкции языка Pyhon
  • Освойте программирование в ходе 12 наглядных уроков
  • Научитесь понимать и писать код в различных стилях программирования
  • Прокачайте алгоритмическое мышление

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

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

Как обучают языкам программирования?………………………………………………………………………………… 5

И вот появился язык Python…………………………………………………………………………………………………………. 7

Структура книги…………………………………………………………………………………………………………………………… 7

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

Об авторе………………………………………………………………………………………………………………………………………. 9

Урок 1. Ввод/вывод, переменные, условия……………………………………………… 10

1.1. Привет, мир!…………………………………………………………………………………………………………………………. 10

1.2. Как тебя зовут?……………………………………………………………………………………………………………………. 13

1.3. Чему равно 12 + 34?……………………………………………………………………………………………………………. 15

1.4. Линейное уравнение…………………………………………………………………………………………………………… 18

1.5. Тип треугольника………………………………………………………………………………………………………………… 26

1.6. Стакан чая и кружка кофе………………………………………………………………………………………………….. 29

Урок 2. Поток чисел, циклы и списки……………………………………………………. 34

2.1. Поток чисел, рекуррентные формулы……………………………………………………………………………….. 34

2.2. Поток чисел, списки……………………………………………………………………………………………………………. 40

2.3. Векторы: длина, сумма, скалярное произведение……………………………………………………………. 46

Урок 3. Флаги. Структурное программирование и стиль Python…………….. 51

3.1. Эпидемия на корабле………………………………………………………………………………………………………….. 51

3.2. Является ли слово палиндромом?……………………………………………………………………………………… 55

3.3. Поиск и замена подстроки в строке…………………………………………………………………………………… 59

3.4. Сравнение чисел между собой. Множества……………………………………………………………………… 62

Урок 4. Словари, рекуррентный индекс в списке…………………………………… 76

4.1. Палиндром путем перестановки букв……………………………………………………………………………….. 76

4.2. Подстановки………………………………………………………………………………………………………………………… 83

Урок 5. Двумерные списки…………………………………………………………………….. 88

5.1. Сложение, транспонирование и умножение матриц……………………………………………………….. 88

5.2. Магический квадрат…………………………………………………………………………………………………………… 98

Итоги уроков 1–5……………………………………………………………………………………………………………………… 105

Урок 6. Декомпозиция программы в функции……………………………………… 106

6.1. Математические формулы как функции…………………………………………………………………………. 106

6.2. Функция факториал с циклом………………………………………………………………………………………….. 108

6.3. Библиотека формул комбинаторики……………………………………………………………………………….. 110

6.4. Декомпозиция магического квадрата в функции……………………………………………………………. 114

Урок 7. Рекурсии………………………………………………………………………………….. 117

7.1. Рекурсивный факториал…………………………………………………………………………………………………… 117

7.2. Числа Фибоначчи без списка, списком, с рекурсией……………………………………………………… 119

7.3. Быстрое возведение в степень………………………………………………………………………………………….. 125

7.4. Мемоизация чисел Фибоначчи………………………………………………………………………………………… 128

7.5. Генерация слов и перестановок………………………………………………………………………………………. 132

Урок 8. Динамика по подотрезкам……………………………………………………….. 139

8.1. Палиндром максимальной длины вычеркиванием букв……………………………………………….. 139

8.2. Максимальный квадрат в матрице………………………………………………………………………………….. 155

Урок 9. Функциональное программирование………………………………………. 163

9.1. Сумма факториалов в функциональном стиле………………………………………………………………. 163

9.2. Стандартные функционалы Python………………………………………………………………………………… 170

9.3. Стандартные функционалы для «Эпидемии на корабле»…………………………………………….. 173

9.4. Стандартные функционалы Python для суммы факториалов………………………………………. 175

9.5. Частичное применение функции на примере степени……………………………………………………. 178

9.6. Универсальный мемоизатор…………………………………………………………………………………………….. 184

9.7. Декораторы……………………………………………………………………………………………………………………….. 191

9.8. Генераторы……………………………………………………………………………………………………………………….. 199

Итоги уроков 6–9……………………………………………………………………………………………………………………… 202

Урок 10. Объектно-ориентированное программирование
предметной области «Геометрия»…………………………………………………………. 204

10.1. Класс «точка»………………………………………………………………………………………………………………….. 204

10.2. Предметная область «Геометрия»…………………………………………………………………………………. 211

10.3. Геометрическая фигура «многоугольник»……………………………………………………………………. 222

10.4. Составные фигуры………………………………………………………………………………………………………….. 227

Урок 11. Матрица в объектно-ориентированном стиле………………………… 231

11.1. Конструктор, индексатор………………………………………………………………………………………………. 231

11.2. Транспонирование, сложение, умножение…………………………………………………………………… 233

11.3. Определитель, обратная матрица, возведение в степень……………………………………………. 235

Урок 12. Программирование сложных коллекций……………………………….. 246

12.1. Функторы…………………………………………………………………………………………………………………………. 246

12.2. Коллекция «кольцо» и задача Иосифа Флавия…………………………………………………………….. 253

12.3. Мемоизация максимального квадрата матрицы в словаре………………………………………… 260

Итоги уроков 10–12…………………………………………………………………………………………………………………. 268

Заключение………………………………………………………………………………………….. 270

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

Добряк Павел Вадимович

Добряк Павел Вадимович — кандидат технических наук, преподаватель Уральского федерального университета. Проводит занятия по различным языкам программирования, базам данных, искусственному интеллекту и проектированию информационных систем. Репетитор по математике и информатике.

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

Вечная классика: “Витязь в тигровой шкуре”

Витязь в тигровой шкуре

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

Для младшего школьного возраста

Витязь в тигровой шкуре

Эпическая поэма  ვეფხისტყაოსანი, Вэпхисткаосани (досл. Тигровошкурый)

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

Царь Аравии, не имея наследника, возводит на трон свою дочь Тинатин, которая влюблена в полководца Автандила. В честь молодой царицы  устраивают охоту и состязания по стрельбе из лука. После состязаний охотники замечают вдалеке прекрасного, мужественного на вид всадника, облаченного в шкуру тигра. Незнакомец исчезает так же быстро, как и появился, оставив царя Ростевана в недоумении.  Автандил клянётся найти таинственного всадника и узнать его имя, а в качестве награды просит руки прекрасной Тинатин.

Шота Руставели

Шота Руставели — грузинский поэт XII века, автор поэмы «Витязь в тигровой шкуре», одного из величайших произведений грузинской литературы. Это произведение стало памятником литературы. Будущий автор стихов получил достойное образование в Греции. Шота изучал труды известного сочинителя «Илиады» Гомера, ознакомился с философией Платона, риторикой, персидской и арабской литературой, а также богословием. Окончив обучение, Руставели заведовал казной царицы Тамары, с именем которой связывают золотой век грузинской истории.

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

Новая книга: “Изучаем MySQL. 2-е издание”

Изучаем MySQL. 2-е издание

Книга знакомит с MySQL — самой популярной системой управления базами данных с открытым исходным кодом. Изложены основы MySQL: установка, моделирование и конструирование баз данных, команды SQL и создание новой базы данных. Рассмотрены практически вопросы работы с MySQL: расширенные запросы, транзакции и замковый механизм, проверка эффективности запросов, управление пользователями и привилегиями, использование файлов опций, резервное копирование и восстановление, конфигурирование и настройка сервераОтдельное внимание уделено мониторингу серверов MySQL, асинхронной и синхронной репликации, кластерным решениям, работе в облаке, балансировке нагрузки и другим продвинутым методам и инструментам.

Электронный архив на сайте издательства содержит цветные иллюстрации к книге.

Для программистов баз данных

Возьмите свои данные под контроль

Книга дает исчерпывающий обзор организации и конструирования эффективной базы данных с помощью MySQL. Рассматривается последняя версия MySQL, включая ее наиболее важные аспекты. Независимо от того, над чем вы работаете, будь то развертывание рабочей среды, устранение неполадок или аварийное восстановление, настоящее практическое руководство предоставляет полезные рекомендации и описание инструментов, необходимые для полного использования преимуществ этой мощной реляционной СУБД.

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

Вы узнаете, как:

  • Начинать работу с реляционной СУБД MySQL и управлять данными
  • Развертывать базы данных MySQL на “голом железе”, на виртуальных машинах и в облаке
  • Конструировать инфраструктуры базы данных
  • Кодировать высокоэффективные запросы
  • Обеспечивать мониторинг и устранять неполадки баз данных MySQL
  • Выполнять эффективные операции резервного копирования и восстановления
  • Оптимизировать издержки баз данных в облаке
  • Понимать концепции баз данных, в особенности те, которые относятся к MySQL

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

Отзывы………………………………………………………………………………………………….. 13

Об авторах……………………………………………………………………………………………… 14

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

Предисловие…………………………………………………………………………………………… 17

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

Как эта книга организована……………………………………………………………………………………………………… 18

Начало работы с MySQL………………………………………………………………………………………………….. 18

Использование MySQL……………………………………………………………………………………………………… 18

MySQL в производстве……………………………………………………………………………………………………… 19

Прочие темы………………………………………………………………………………………………………………………. 20

Исходный код и иллюстрации………………………………………………………………………………………………….. 20

Условные обозначения в книге…………………………………………………………………………………………………. 20

Глава 1. Установка MySQL……………………………………………………………………. 23

Развилки MySQL………………………………………………………………………………………………………………………… 24

Редакция MySQL для сообщества……………………………………………………………………………………. 24

Сервер Percona для MySQL………………………………………………………………………………………………. 24

Сервер MariaDB…………………………………………………………………………………………………………………. 24

Редакция MySQL для предприятий………………………………………………………………………………….. 25

Варианты инсталляции и платформы……………………………………………………………………………………… 25

  1. Скачать дистрибутив, который вы хотите инсталлировать……………………………………… 26
  2. Установить дистрибутив………………………………………………………………………………………………. 26
  3. Выполнить все необходимые постинсталляционные настройки……………………………… 27
  4. Выполнить контрольные нагрузочные тесты……………………………………………………………… 27

Установка MySQL в Linux………………………………………………………………………………………………………… 27

Инсталлирование MySQL в CentOS 7……………………………………………………………………………… 27

Инсталлирование MySQL 8.0………………………………………………………………………………….. 28

Инсталлирование MariaDB 10.5……………………………………………………………………………… 31

Инсталлирование сервера Percona Server 8.0…………………………………………………………. 32

Инсталлирование MySQL 5.7………………………………………………………………………………….. 33

Инсталлирование Percona Server 5.7……………………………………………………………………….. 34

Инсталлирование MySQL в CentOS 8……………………………………………………………………………… 35

Инсталлирование MySQL 8.0………………………………………………………………………………….. 35

Инсталлирование сервера Percona Server 8.0…………………………………………………………. 36

Инсталлирование MySQL 5.7………………………………………………………………………………….. 39

Инсталлирование MySQL в Ubuntu 20.04 LTS (Focal Fossa)…………………………………………. 41

Инсталлирование MySQL 8.0………………………………………………………………………………….. 41

Инсталлирование сервера Percona Server 8……………………………………………………………. 44

Инсталлирование MariaDB 10.5……………………………………………………………………………… 45

Инсталлирование MySQL 5.7………………………………………………………………………………….. 46

Установка MySQL в macOS Big Sur………………………………………………………………………………………….. 49

Инсталлирование MySQL 8……………………………………………………………………………………………… 49

Установка MySQL в Windows 10………………………………………………………………………………………………. 55

Содержимое каталога MySQL………………………………………………………………………………………………….. 62

Файлы MySQL 5.7, используемые по умолчанию………………………………………………………….. 63

Файлы MySQL 8.0, используемые по умолчанию………………………………………………………….. 66

Использование интерфейса командной строки………………………………………………………………………. 66

Использование Docker……………………………………………………………………………………………………………….. 67

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

Инсталлирование Docker в CentOS 7………………………………………………………………………. 68

Инсталлирование Docker в Ubuntu 20.04 (Focal Fossa)…………………………………………. 68

Развертывание контейнера MySQL…………………………………………………………………………. 69

Развертывание контейнеров MariaDB и Percona Server…………………………………………. 71

Использование симулированных производственных сред……………………………………………………. 72

Инсталлирование DBdeployer………………………………………………………………………………………….. 73

Использование DBdeployer……………………………………………………………………………………………….. 73

Модернизация сервера MySQL………………………………………………………………………………………………… 77

Глава 2. Моделирование и конструирование баз данных………………………. 81

Как не надо разрабатывать базу данных……………………………………………………………………………….. 81

Процесс конструирования базы данных…………………………………………………………………………………. 83

Модель взаимосвязей сущностей……………………………………………………………………………………………… 84

Представление сущностей………………………………………………………………………………………………… 84

Представление взаимосвязей……………………………………………………………………………………………. 87

Частичное и полное участие…………………………………………………………………………………………….. 89

Сущность или атрибут?……………………………………………………………………………………………………. 89

Сущность или взаимосвязь?……………………………………………………………………………………………… 91

Промежуточные сущности……………………………………………………………………………………………….. 91

Слабые и сильные сущности……………………………………………………………………………………………. 92

Нормализация базы данных…………………………………………………………………………………………………….. 94

Нормализация таблицы образцов……………………………………………………………………………………………. 96

Первая нормальная форма: никаких повторяющихся групп…………………………………………. 96

Вторая нормальная форма: устранить избыточные данные………………………………………… 97

Третья нормальная форма: исключить данные, не зависящие от ключа……………………… 97

Примеры моделирования взаимосвязей сущностей……………………………………………………………….. 98

Использование модели взаимосвязей сущностей…………………………………………………………………. 102

Соотнесение сущностей и взаимосвязей с таблицами базы данных………………………….. 103

Соотнести сущности с таблицами базы данных…………………………………………………. 104

Соотнесите взаимосвязи с таблицами базы данных……………………………………………. 104

Создание модели взаимосвязей сущностей банковской базы данных……………………….. 104

Взаимосвязь “многие ко многим” (N:M)…………………………………………………………………. 105

Взаимосвязь “один ко многим” (1:N)……………………………………………………………………… 105

Конвертирование EER в базу данных MySQL с помощью
инструмента Workbench…………………………………………………………………………………………………. 106

Глава 3. Базовый SQL………………………………………………………………………….. 111

Использование базы данных sakila……………………………………………………………………………………….. 112

Инструкция SELECT и базовые приемы выполнения запросов…………………………………………… 114

Однотабличные инструкции SELECT……………………………………………………………………………. 115

Выбор столбцов………………………………………………………………………………………………………………. 116

Отбор строк с помощью компонента WHERE……………………………………………………………….. 118

Основы WHERE……………………………………………………………………………………………………….. 118

Комбинирование условий с AND, OR, NOT и XOR……………………………………………….. 122

Компонент ORDER BY……………………………………………………………………………………………………… 127

Компонент LIMIT……………………………………………………………………………………………………………… 129

Соединение двух таблиц………………………………………………………………………………………… 131

Инструкция INSERT…………………………………………………………………………………………………………………. 133

Основы INSERT………………………………………………………………………………………………………………… 133

Альтернативные синтаксические конструкции…………………………………………………………….. 136

Инструкция DELETE………………………………………………………………………………………………………………… 139

Основы DELETE……………………………………………………………………………………………………………….. 139

Использование WHERE, ORDER BY и LIMIT………………………………………………………………….. 140

Удаление всех строк с помощью TRUNCATE……………………………………………………………….. 141

Инструкция UPDATE……………………………………………………………………………………………………………….. 142

Примеры…………………………………………………………………………………………………………………………… 142

Использование WHERE, ORDER BY и LIMIT………………………………………………………………….. 143

Разведывательный анализ баз данных и таблиц с помощью SHOW и mysqlshow……………… 144

Глава 4. Работа со структурами базы данных………………………………………. 149

Создание и использование баз данных…………………………………………………………………………………. 149

Создание таблиц……………………………………………………………………………………………………………………… 152

Основы……………………………………………………………………………………………………………………………… 152

Порядок расстановки и наборы символов…………………………………………………………………….. 155

Другие функциональные возможности………………………………………………………………………….. 158

Типы столбцов…………………………………………………………………………………………………………………. 160

Целочисленные типы……………………………………………………………………………………………… 161

Типы с фиксированной точкой………………………………………………………………………………. 163

Типы с плавающей точкой…………………………………………………………………………………….. 164

Строковые типы………………………………………………………………………………………………………. 167

Типы даты и времени……………………………………………………………………………………………… 177

Другие типы…………………………………………………………………………………………………………….. 183

Ключи и индексы…………………………………………………………………………………………………………….. 183

Функциональность AUTO_INCREMENT………………………………………………………………………… 190

Изменение структур…………………………………………………………………………………………………………………. 193

Добавление, удаление и изменение столбцов………………………………………………………………. 193

Добавление, удаление и изменение индексов……………………………………………………………….. 197

Переименование таблиц и изменение других структур……………………………………………….. 199

Удаление структур………………………………………………………………………………………………………………….. 200

Удаление баз данных……………………………………………………………………………………………………… 200

Удаление таблиц……………………………………………………………………………………………………………… 201

Глава 5. Расширенные запросы……………………………………………………………. 203

Псевдонимы……………………………………………………………………………………………………………………………… 203

Псевдонимы столбцов…………………………………………………………………………………………………….. 204

Псевдонимы таблиц………………………………………………………………………………………………………… 206

Агрегирование данных……………………………………………………………………………………………………………. 209

Компонент DISTINCT………………………………………………………………………………………………………. 209

Компонент GROUP BY…………………………………………………………………………………………………….. 211

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

Компонент HAVING…………………………………………………………………………………………………………. 219

Расширенные соединения……………………………………………………………………………………………………….. 221

Внутреннее соединение………………………………………………………………………………………………….. 221

Объединение…………………………………………………………………………………………………………………….. 224

Левое и правое соединения…………………………………………………………………………………………….. 231

Естественное соединение……………………………………………………………………………………………….. 235

Постоянные выражения в соединениях…………………………………………………………………………. 237

Вложенные запросы………………………………………………………………………………………………………………… 239

Основы вложенных запросов…………………………………………………………………………………………. 240

Компоненты ANY, SOME, ALL, IN и NOT IN…………………………………………………………………… 243

Использование ANY и IN…………………………………………………………………………………………. 244

Использование ALL…………………………………………………………………………………………………. 247

Написание строковых подзапросов……………………………………………………………………… 249

Компоненты EXISTS и NOT EXISTS………………………………………………………………………………… 250

Основы EXISTS и NOT EXISTS………………………………………………………………………………… 251

Коррелированные подзапросы……………………………………………………………………………… 252

Вложенные запросы в компоненте FROM…………………………………………………………………….. 256

Вложенные запросы в соединениях………………………………………………………………………………. 258

Пользовательские переменные……………………………………………………………………………………………….. 260

Глава 6. Транзакции и замковый механизм…………………………………………. 265

Уровни изоляции……………………………………………………………………………………………………………………… 266

REPEATABLE READ…………………………………………………………………………………………………………. 268

READ COMMITTED………………………………………………………………………………………………………….. 269

READ UNCOMMITTED…………………………………………………………………………………………………….. 270

SERIALIZABLE………………………………………………………………………………………………………………….. 271

Применение замков………………………………………………………………………………………………………………….. 274

Замки на основе метаданных…………………………………………………………………………………………. 275

Строковые замки……………………………………………………………………………………………………………… 280

Тупики………………………………………………………………………………………………………………………………. 283

Параметры MySQL, связанные с изоляцией и замками……………………………………………………….. 285

Глава 7. Достижение большего с MySQL……………………………………………… 287

Вставка данных с помощью запросов…………………………………………………………………………………… 287

Загрузка данных из файлов c разделителями-запятыми……………………………………………………… 293

Выгрузка данных в файлы с разделителями-запятыми……………………………………………………….. 301

Создание таблиц с помощью запросов………………………………………………………………………………….. 303

Выполнение многотабличных обновлений и удалений………………………………………………………. 308

Удаление………………………………………………………………………………………………………………………….. 308

Обновления………………………………………………………………………………………………………………………. 313

Замена данных…………………………………………………………………………………………………………………………. 314

Инструкция EXPLAIN………………………………………………………………………………………………………………. 318

Альтернативные механизмы хранения данных……………………………………………………………………. 324

InnoDB……………………………………………………………………………………………………………………………… 326

MyISAM и Aria…………………………………………………………………………………………………………………. 328

MyRocks и TokuDB…………………………………………………………………………………………………………. 329

Другие табличные типы………………………………………………………………………………………………….. 331

Глава 8. Управление пользователями и привилегиями………………………… 333

Пользователи и привилегии……………………………………………………………………………………………………. 333

Корневой пользователь…………………………………………………………………………………………………………… 335

Создание и использование новых пользователей………………………………………………………………… 336

Таблицы привилегий……………………………………………………………………………………………………………….. 343

Команды управления пользователями и журналирование…………………………………………………. 345

Модифицирование и удаление пользователей……………………………………………………………………… 347

Модифицирование пользователя…………………………………………………………………………………… 347

Удаление пользователя…………………………………………………………………………………………………… 351

Привилегии……………………………………………………………………………………………………………………………….. 355

Статические и динамические привилегии…………………………………………………………………….. 357

SUPER-привилегия…………………………………………………………………………………………………………… 358

Команды управления привилегиями……………………………………………………………………………… 359

GRANT………………………………………………………………………………………………………………………. 359

REVOKE……………………………………………………………………………………………………………………. 361

Проверка привилегий………………………………………………………………………………………………………. 362

Привилегия GRANT OPTION……………………………………………………………………………………………. 365

Роли…………………………………………………………………………………………………………………………………………… 368

Изменение пароля пользователя root и небезопасный запуск…………………………………………….. 375

Несколько идей в отношении безопасной настройки…………………………………………………………… 376

Глава 9. Использование файлов опций………………………………………………… 379

Структура файла опций………………………………………………………………………………………………………….. 379

Диапазон опций……………………………………………………………………………………………………………………….. 384

Порядок поиска файлов опций……………………………………………………………………………………………….. 387

Специальные файлы опций…………………………………………………………………………………………………….. 388

Конфигурационный файл путей для входа…………………………………………………………………… 388

Конфигурационный файл хранимых на диске системных переменных…………………….. 391

Определение действующих опций…………………………………………………………………………………………. 393

Глава 10. Резервное копирование и восстановление…………………………….. 399

Физические и логические резервные копии…………………………………………………………………………… 399

Логические резервные копии………………………………………………………………………………………….. 400

Физические резервные копии………………………………………………………………………………………….. 402

Обзор логических и физических резервных копий……………………………………………………….. 404

Репликация как инструмент резервного копирования………………………………………………………….. 405

Отказ инфраструктуры……………………………………………………………………………………………………. 405

Дефект развертывания…………………………………………………………………………………………………….. 406

Программа mysqldump…………………………………………………………………………………………………………….. 406

Самогенерация репликации с помощью mysqldump…………………………………………………….. 412

Загрузка данных из файла дампа SQL…………………………………………………………………………………… 413

mysqlpump…………………………………………………………………………………………………………………………………. 414

mydumper и myloader……………………………………………………………………………………………………………….. 416

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

Percona XtraBackup…………………………………………………………………………………………………………………. 419

Резервное копирование и восстановление…………………………………………………………………….. 421

Продвинутые функциональные возможности………………………………………………………………. 424

Инкрементное резервное копирование с помощью XtraBackup…………………………………. 425

Другие средства физического резервного копирования………………………………………………………. 427

MySQL Enterprise Backup……………………………………………………………………………………………….. 428

mariabackup……………………………………………………………………………………………………………………… 428

Восстановление на определенный момент времени…………………………………………………………….. 429

Техническая информация о двоичных журналах………………………………………………………… 430

Поддержка двоичных журналов……………………………………………………………………………………. 431

Идентификация цели восстановления на определенный момент времени…………………. 432

Пример восстановления на определенный момент времени: XtraBackup…………………. 433

Пример восстановления на определенный момент времени: mysqldump…………………… 434

Экспортирование и импортирование табличных пространств InnoDB…………………………….. 435

Технические предпосылки……………………………………………………………………………………………… 436

Экспортирование табличного пространства……………………………………………………………….. 436

Импортирование табличного пространства…………………………………………………………………. 437

Однотабличная реконструкция с помощью XtraBackup……………………………………………… 439

Тестирование и верифицирование резервных копий……………………………………………………………. 440

Вводное пособие по стратегии резервного копирования баз данных………………………………… 442

Глава 11. Конфигурирование и настройка сервера………………………………. 445

Демон сервера MySQL…………………………………………………………………………………………………………….. 445

Переменные сервера MySQL………………………………………………………………………………………………….. 446

Проверка настроек сервера……………………………………………………………………………………………. 446

Лучшие образцы практики……………………………………………………………………………………………… 447

Лучшие образцы практики в работе с операционной системой………………………… 447

Лучшие образцы практики в работе с MySQL…………………………………………………….. 455

Глава 12. Мониторинг серверов MySQL……………………………………………….. 463

Метрики операционной системы……………………………………………………………………………………………. 464

Центральный процессор…………………………………………………………………………………………………. 464

Диск…………………………………………………………………………………………………………………………………… 473

Память………………………………………………………………………………………………………………………………. 478

Сеть…………………………………………………………………………………………………………………………………… 483

Наблюдаемость сервера MySQL……………………………………………………………………………………………. 488

Переменные состояния……………………………………………………………………………………………………. 488

Базовые рецепты мониторинга………………………………………………………………………………………. 491

Доступность сервера MySQL………………………………………………………………………………… 491

Клиентские подключения………………………………………………………………………………………. 492

Счетчики запросов………………………………………………………………………………………………….. 495

Типы и качество запросов……………………………………………………………………………………… 496

Метрики операций ввода-вывода и транзакций InnoDB…………………………………….. 501

Журнал медленных запросов…………………………………………………………………………………………. 506

Отчет о состоянии механизма InnoDB………………………………………………………………………….. 510

Методы исследования…………………………………………………………………………………………………………….. 513

Метод USE……………………………………………………………………………………………………………………….. 513

Метод RED……………………………………………………………………………………………………………………….. 515

Мониторинговые инструменты MySQL………………………………………………………………………………… 516

Инцидентно-диагностический и ручной сбор данных…………………………………………………………. 523

Периодический сбор значений переменных состояния системы………………………………… 523

Использование pt-stalk для сбора метрик MySQL и операционной системы…………….. 525

Расширенный ручной сбор данных……………………………………………………………………………….. 526

Глава 13. Высокая доступность……………………………………………………………. 529

Асинхронная репликация……………………………………………………………………………………………………….. 529

Базовые параметры, устанавливаемые на источнике и реплике………………………………… 532

Создание реплики с помощью Percona XtraBackup……………………………………………………… 533

Создание реплики с помощью плагина клонирования………………………………………………… 535

Создание реплики с помощью mysqldump…………………………………………………………………….. 537

Создание реплики с помощью mydumper и myloader……………………………………………………. 539

Настройка утилит mydumper и myloader………………………………………………………………. 539

Извлечение данных из источника………………………………………………………………………….. 539

Реконструирование данных на сервере-реплике…………………………………………………. 540

Установление репликации……………………………………………………………………………………… 540

Групповая репликация……………………………………………………………………………………………………. 541

Инсталлирование групповой репликации……………………………………………………………. 541

Настройка групповой репликации в MySQL……………………………………………………….. 544

Синхронная репликация…………………………………………………………………………………………………………. 547

Кластер Galera/PXC………………………………………………………………………………………………………… 548

Глава 14. MySQL в облаке……………………………………………………………………. 553

База данных как служба (DBaaS)………………………………………………………………………………………….. 553

Amazon RDS для MySQL/MariaDB………………………………………………………………………………… 554

Google Cloud SQL для MySQL………………………………………………………………………………………… 558

Azure SQL…………………………………………………………………………………………………………………………. 561

Amazon Aurora…………………………………………………………………………………………………………………………. 563

Облачные экземпляры MySQL……………………………………………………………………………………………….. 564

MySQL в Kubernetes…………………………………………………………………………………………………………………. 564

Развертывание кластера Percona XtraDB в Kubernetes………………………………………………… 565

Глава 15. Балансировка нагрузки в MySQL…………………………………………. 571

Балансировка нагрузки с помощью драйверов приложений………………………………………………. 571

Балансировщик нагрузки ProxySQL………………………………………………………………………………………. 572

Инсталлирование и конфигурирование ProxySQL……………………………………………………….. 574

Балансировщик нагрузки HAProxy………………………………………………………………………………………… 578

Инсталлирование и конфигурирование HAProxy………………………………………………………… 579

Маршрутизатор MySQL…………………………………………………………………………………………………………. 584

Глава 16. Прочие темы…………………………………………………………………………. 591

Оболочка MySQL…………………………………………………………………………………………………………………….. 591

Установка оболочки MySQL………………………………………………………………………………………….. 591

Установка оболочки MySQL в Ubuntu 20.04 Focal Fossa…………………………………………….. 591

Установка оболочки MySQL на CentOS 8…………………………………………………………………….. 592

Развертывание симулированного кластера InnoDB с помощью оболочки MySQL…. 593

Утилиты оболочки MySQL…………………………………………………………………………………………….. 597

util.dumpInstance()…………………………………………………………………………………………………… 597

util.dumpSchemas()…………………………………………………………………………………………………… 600

util.dumpTables()……………………………………………………………………………………………………… 600

util.loadDump(url[, опции])…………………………………………………………………………………….. 600

Графики пламени…………………………………………………………………………………………………………………….. 601

Сборка MySQL из исходного кода…………………………………………………………………………………………. 604

Сборка MySQL для Ubuntu Focus Fossa и процессоров ARM…………………………………….. 604

Анализ аварий MySQL……………………………………………………………………………………………………………. 608

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

Гриппа-Винисиус

Винисиус Гриппа — старший инженер службы поддержки компаний Percona и ACE Oracle. Помог клиентам Percona разобраться в сотнях раз-личных случаев использо-вания MySQL.

 

 

Кузьмичев-Сергей

Сергей Кузьмичев — в настоящее время старший инженер технической поддержки в компании Percona, до этого почти десять лет работал администратором баз данных и инженером DevOps.

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

Новинка: “Настройка производительности MySQL”

Настройка производительности MySQL

Описание

Книга посвящена практическим аспектам работы с MySQL. Рассмотрены приёмы сегментирования  баз данных, репликации, шардирования. Уделено внимание упорядочиванию транзакций, резервному копированию и бесшовному взаимодействию между предприятием и облаком, что способствует сохранению данных и их эксплуатационной надёжности. Также исследованы  разнообразные аналитические и мониторинговые инструменты и предложены проверенные  методы, актуальные при развитии и долгосрочной поддержке MySQL и других РСУБД.

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

Примеры из книги можно скачать по ссылке https://github.com/efficient-mysql-performance

Птица на обложке данной книги — хохлатый барбет (Trachyphonus vaillantii), получивший прозвище «фруктовый салат» за свое красочное оперение и фруктовую диету. В основном обитающие на юге Африки, они обычно встречаются в лесных массивах, пригородных садах и огородах, а также вдоль русел рек и не мигрируют.

Секреты и приёмы

СУБД MySQL в последние годы настолько усложнилась, что книги о ней попадаются то элементарные, то донельзя продвинутые. Но именно производительность MySQL – аспект наиболее важный на практике, часто обходят вниманием, поскольку очень сложно его раскрыть, не вдаваясь в детали внутреннего устройства MySQL. Перед вами книга, в которой эта проблема, наконец, решена. Анализируя скорость выполнения запросов, индексирование самых распространённых инструкций, блокировку рядов и паттерны доступа, эта книга служит путеводителем по важнейшим метрикам MySQL и позволяет выжать максимум из стационарных и облачных систем.

В этой книге:

  • Начинать работу с реляционной СУБД MySQL и управлять данными
  • Подробный разбор запросов MySQL и скорости их выполнения
  • Агрегация и анализ метрик, формирование отчётов по ним
  • Изучение транзакций и блокировок
  • Масштабирование, шардирование, репликация MySQL
  • Переход в облако

Дэниэл проделал отличную работу – эта книга поможет вам максимально быстро достичь цели, не петляя и не гадая. Особенно хорошо и доходчиво рассмотрена блокировка строк в InnoDB.
Вадим Ткаченко, совтор книги «MySQL по максимуму»

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

Предисловие…………………………………………………………………………………………… 11

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

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

Глава 1. Время отклика на запрос………………………………………………………….. 13

Правдивая история ложной производительности…………………………………………………………………… 14

Краеугольный камень……………………………………………………………………………………………………………….. 14

Отчет о запросе………………………………………………………………………………………………………………………….. 15

Источники……………………………………………………………………………………………………………………….. 16

Агрегация………………………………………………………………………………………………………………………… 18

Отчетность………………………………………………………………………………………………………………………. 20

Профиль запроса……………………………………………………………………………………………………. 21

Отчет о запросе………………………………………………………………………………………………………. 23

Анализ запросов………………………………………………………………………………………………………………………… 23

Метрики запросов…………………………………………………………………………………………………………… 24

Время запроса………………………………………………………………………………………………………… 24

Время блокировки………………………………………………………………………………………………….. 26

Проверенные строки………………………………………………………………………………………………. 30

Отправленные строки…………………………………………………………………………………………….. 31

Затронутые строки…………………………………………………………………………………………………. 32

Полное сканирование таблицы…………………………………………………………………………….. 33

Полное сканирование присоединенной таблицы……………………………………………….. 33

Число временных таблиц на диске……………………………………………………………………….. 35

Количество запросов……………………………………………………………………………………………… 36

Метаданные и приложение……………………………………………………………………………………………. 36

Относительные значения……………………………………………………………………………………………….. 37

Среднее значение, процентиль и максимум…………………………………………………………………. 37

Улучшение времени отклика на запрос…………………………………………………………………………………… 40

Прямая оптимизация запросов………………………………………………………………………………………. 40

Косвенная оптимизация запросов…………………………………………………………………………………. 41

Когда оптимизировать запросы……………………………………………………………………………………………….. 42

Когда производительность влияет на клиентов…………………………………………………………… 42

До и после изменений кода……………………………………………………………………………………………. 42

Раз в месяц……………………………………………………………………………………………………………………….. 43

MySQL: быстрее………………………………………………………………………………………………………………………… 43

Итоги…………………………………………………………………………………………………………………………………………… 45

Практика: определение медленных запросов…………………………………………………………………………. 46

Глава 2. Индексы и индексация…………………………………………………………….. 49

Отвлекающие маневры в теме производительности………………………………………………………………. 51

Более быстрое и мощное оборудование!……………………………………………………………………… 51

Тонкая настройка (тюнинг) MySQL……………………………………………………………………………… 52

Индексы MySQL: наглядное введение……………………………………………………………………………………… 54

Таблицы InnoDB являются индексами…………………………………………………………………………. 55

Методы доступа к таблице……………………………………………………………………………………………. 59

Поиск по индексу……………………………………………………………………………………………………. 59

Сканирование индекса…………………………………………………………………………………………… 60

Сканирование таблицы…………………………………………………………………………………………. 61

Требование крайнего левого префикса………………………………………………………………………… 63

EXPLAIN: план выполнения запроса…………………………………………………………………………….. 65

WHERE…………………………………………………………………………………………………………………………….. 67

GROUP BY………………………………………………………………………………………………………………………… 73

ORDER BY………………………………………………………………………………………………………………………… 78

Покрывающие индексы………………………………………………………………………………………………….. 83

Соединение таблиц (join tables)…………………………………………………………………………………….. 84

Индексация: думать, как MySQL……………………………………………………………………………………………… 92

Узнайте запрос……………………………………………………………………………………………………………….. 92

Поймите с помощью EXPLAIN……………………………………………………………………………………….. 93

Оптимизируйте запрос…………………………………………………………………………………………………… 94

Развертывание и проверка…………………………………………………………………………………………….. 95

Это был хороший индекс, пока………………………………………………………………………………………………… 96

Изменение запросов……………………………………………………………………………………………………….. 96

Избыточные, повторяющиеся и неиспользуемые………………………………………………………… 97

Экстремальная селективность………………………………………………………………………………………. 98

Это ловушка! (Когда MySQL выбирает другой индекс)…………………………………………….. 99

Алгоритмы соединения таблиц………………………………………………………………………………………………. 100

Итоги…………………………………………………………………………………………………………………………………………. 101

Практика: поиск повторяющихся индексов…………………………………………………………………………… 102

Глава 3. Данные…………………………………………………………………………………… 105

Три секрета………………………………………………………………………………………………………………………………. 106

Индексы могут не помочь…………………………………………………………………………………………….. 106

Индексное сканирование…………………………………………………………………………………….. 107

Обнаружение строк……………………………………………………………………………………………… 107

Соединение таблиц………………………………………………………………………………………………. 108

Размер рабочего набора……………………………………………………………………………………… 109

Чем меньше данных, тем лучше………………………………………………………………………………….. 110

Чем меньше QPS, тем лучше………………………………………………………………………………………… 110

Принцип наименьшего количества данных…………………………………………………………………………… 111

Доступ к данным…………………………………………………………………………………………………………… 111

Возвращайте только необходимые столбцы…………………………………………………….. 112

Уменьшите сложность запросов…………………………………………………………………………. 112

Ограничьте доступ к строкам……………………………………………………………………………… 113

Ограничьте результирующий набор………………………………………………………………….. 116

Избегайте сортировки строк……………………………………………………………………………….. 118

Хранение данных…………………………………………………………………………………………………………. 118

Сохраняются только необходимые строки……………………………………………………….. 119

Используется каждый столбец……………………………………………………………………………. 119

Каждый столбец компактен и практичен…………………………………………………………… 119

Каждое значение компактно и практично…………………………………………………………. 121

Используется каждый вторичный индекс, а не дубликат…………………………………. 126

Хранятся только необходимые строки………………………………………………………………. 128

Удаление или архивирование данных…………………………………………………………………………………… 129

Инструменты…………………………………………………………………………………………………………………. 129

Размер пакета……………………………………………………………………………………………………………….. 129

Конфликт блокировки строк………………………………………………………………………………………… 132

Пространство и время………………………………………………………………………………………………….. 132

Парадокс бинарного лога……………………………………………………………………………………………. 133

Итоги…………………………………………………………………………………………………………………………………………. 134

Практика: аудит доступа к данным запросов………………………………………………………………………. 134

Глава 4. Паттерны доступа…………………………………………………………………… 137

MySQL ничего не делает…………………………………………………………………………………………………………. 138

Производительность дестабилизируется на пределе…………………………………………………………… 139

Toyota и Ferrari…………………………………………………………………………………………………………………………. 144

Паттерны доступа к данным…………………………………………………………………………………………………… 145

Чтение/запись……………………………………………………………………………………………………………….. 147

Пропускная способность……………………………………………………………………………………………… 147

Возраст данных……………………………………………………………………………………………………………. 148

Модель данных…………………………………………………………………………………………………………….. 150

Изоляция транзакций……………………………………………………………………………………………………. 150

Согласованность чтения……………………………………………………………………………………………… 151

Конкурентность……………………………………………………………………………………………………………. 152

Доступ к строкам………………………………………………………………………………………………………….. 153

Результирующий набор……………………………………………………………………………………………….. 153

Изменения в приложении………………………………………………………………………………………………………… 154

Аудит кода…………………………………………………………………………………………………………………….. 154

Разгрузка операций чтения………………………………………………………………………………………….. 156

Реплика MySQL……………………………………………………………………………………………………. 157

Кеш-сервер……………………………………………………………………………………………………………. 158

Очередь для операций записи……………………………………………………………………………………… 159

Секционирование данных……………………………………………………………………………………………. 161

Не используйте MySQL……………………………………………………………………………………………….. 162

Более быстрое и мощное оборудование?……………………………………………………………………………… 162

Итоги…………………………………………………………………………………………………………………………………………. 164

Практика: опишите паттерн доступа…………………………………………………………………………………….. 165

Глава 5. Шардирование……………………………………………………………………….. 167

Почему единая база данных не масштабируется…………………………………………………………………. 168

Рабочая нагрузка приложения……………………………………………………………………………………. 168

Тесты производительности синтетичны…………………………………………………………………….. 170

Операции записи…………………………………………………………………………………………………………… 171

Изменения схемы………………………………………………………………………………………………………….. 173

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

Галька, а не валуны…………………………………………………………………………………………………………………. 174

Шардирование: краткое введение………………………………………………………………………………………….. 175

Ключ шардирования……………………………………………………………………………………………………. 176

Стратегии………………………………………………………………………………………………………………………. 177

Хеш………………………………………………………………………………………………………………………… 178

Диапазон……………………………………………………………………………………………………………….. 179

Поиск……………………………………………………………………………………………………………………… 181

Проблемы………………………………………………………………………………………………………………………. 182

Транзакции……………………………………………………………………………………………………………. 182

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

Кросс-шард запросы……………………………………………………………………………………………. 182

Решардирование…………………………………………………………………………………………………… 183

Ребалансировка……………………………………………………………………………………………………. 184

Онлайн-изменения схемы…………………………………………………………………………………….. 185

Альтернативы…………………………………………………………………………………………………………………………… 185

NewSQL………………………………………………………………………………………………………………………….. 185

Промежуточное программное обеспечение………………………………………………………………. 187

Микросервисы………………………………………………………………………………………………………………. 187

Не используйте MySQL……………………………………………………………………………………………….. 188

Итоги…………………………………………………………………………………………………………………………………………. 188

Практика: четырехлетняя пригодность…………………………………………………………………………………. 189

Глава 6. Метрики сервера…………………………………………………………………….. 191

Производительность запросов в сравнении с производительностью сервера…………………… 193

Нормальная и стабильная: лучшая база данных — это скучная база данных………………… 195

Ключевые показатели производительности…………………………………………………………………………. 196

Поле метрик……………………………………………………………………………………………………………………………… 197

Время отклика………………………………………………………………………………………………………………. 198

Скорость (англ. rate)……………………………………………………………………………………………………… 198

Объем использования (англ. utilization)………………………………………………………………………. 199

Ожидание………………………………………………………………………………………………………………………. 200

Ошибки………………………………………………………………………………………………………………………….. 201

Паттерны доступа………………………………………………………………………………………………………… 201

Внутренние метрики…………………………………………………………………………………………………….. 202

Спектры…………………………………………………………………………………………………………………………………….. 202

Время отклика на запрос……………………………………………………………………………………………… 204

Ошибки………………………………………………………………………………………………………………………….. 205

Запросы…………………………………………………………………………………………………………………………. 207

QPS…………………………………………………………………………………………………………………………. 207

TPS…………………………………………………………………………………………………………………………. 208

Чтение/запись……………………………………………………………………………………………………….. 210

Администрирование…………………………………………………………………………………………….. 210

Show………………………………………………………………………………………………………………………. 211

Потоки и соединения……………………………………………………………………………………………………. 211

Временные объекты……………………………………………………………………………………………………… 214

Подготовленные инструкции………………………………………………………………………………………. 215

Плохие SELECT…………………………………………………………………………………………………………….. 216

Пропускная способность сети…………………………………………………………………………………….. 217

Репликация……………………………………………………………………………………………………………………. 217

Объем данных……………………………………………………………………………………………………………….. 218

InnoDB…………………………………………………………………………………………………………………………… 220

Длина списка истории (метрика)………………………………………………………………………… 220

Взаимоблокировка……………………………………………………………………………………………….. 220

Блокировка строк…………………………………………………………………………………………………. 221

Пропускная способность данных……………………………………………………………………….. 222

IOPS……………………………………………………………………………………………………………………….. 223

Эффективность буферного пула…………………………………………………………………………. 225

Сброс страниц………………………………………………………………………………………………………. 227

Лог транзакций…………………………………………………………………………………………………….. 234

Мониторинг и оповещение……………………………………………………………………………………………………… 238

Разрешение……………………………………………………………………………………………………………………. 238

Охота на миражи (пороговые значения)…………………………………………………………………….. 240

Оповещения о пользовательском опыте и объективных ограничениях………………….. 241

Причина и следствие……………………………………………………………………………………………………. 243

Итоги…………………………………………………………………………………………………………………………………………. 245

Практика: анализ ключевых показателей производительности…………………………………………. 246

Практика: проверка оповещений и пороговых значений…………………………………………………….. 247

Глава 7. Запаздывание репликации……………………………………………………… 249

Основа………………………………………………………………………………………………………………………………………. 250

Источник — реплика……………………………………………………………………………………………………. 251

События бинарного лога……………………………………………………………………………………………… 253

Запаздывание репликации…………………………………………………………………………………………… 254

Причины……………………………………………………………………………………………………………………………………. 256

Пропускная способность транзакций…………………………………………………………………………. 256

Восстановление после сбоя…………………………………………………………………………………………. 257

Сетевые проблемы……………………………………………………………………………………………………….. 257

Риск: потеря данных………………………………………………………………………………………………………………… 258

Асинхронная репликация…………………………………………………………………………………………….. 258

Полусинхронная репликация………………………………………………………………………………………. 260

Уменьшение запаздывания: многопоточная репликация…………………………………………………….. 262

Мониторинг……………………………………………………………………………………………………………………………… 266

Время восстановления…………………………………………………………………………………………………………….. 268

Итоги…………………………………………………………………………………………………………………………………………. 270

Практика: мониторинг субсекундного запаздывания………………………………………………………….. 271

Глава 8. Транзакции…………………………………………………………………………….. 275

Блокировка строк…………………………………………………………………………………………………………………….. 276

Блокировки индексной записи и следующего ключа………………………………………………… 278

Блокировка интервала…………………………………………………………………………………………………. 282

Вторичные индексы……………………………………………………………………………………………………… 285

Блокировка намерения вставки…………………………………………………………………………………… 288

MVCC и логи отмены………………………………………………………………………………………………………………. 291

Длина списка истории…………………………………………………………………………………………………………….. 295

Распространенные проблемы…………………………………………………………………………………………………. 297

Большие транзакции (размер транзакции)…………………………………………………………………. 298

Длительные транзакции………………………………………………………………………………………………. 299

Зависшие транзакции…………………………………………………………………………………………………… 300

Заброшенные транзакции……………………………………………………………………………………………. 301

Отчетность……………………………………………………………………………………………………………………………….. 302

Активные транзакции: последние……………………………………………………………………………….. 302

Активные транзакции: итоги……………………………………………………………………………………….. 306

Активная транзакция: история……………………………………………………………………………………. 306

Зафиксированные транзакции: итоги…………………………………………………………………………. 307

Итоги…………………………………………………………………………………………………………………………………………. 309

Практика: оповещение о длине списка истории…………………………………………………………………… 310

Практика: изучение блокировки строк………………………………………………………………………………….. 311

Глава 9. Другие проблемы……………………………………………………………………. 313

Сплит-брейн — величайший риск………………………………………………………………………………………….. 313

Дрейф данных реален, но невидим………………………………………………………………………………………… 314

Не доверяйте ORM…………………………………………………………………………………………………………………… 315

Схемы постоянно меняются……………………………………………………………………………………………………. 316

MySQL расширяет стандартный SQL……………………………………………………………………………………. 316

«Шумные соседи»…………………………………………………………………………………………………………………….. 317

Приложения не завершаются корректно……………………………………………………………………………….. 317

Высокопроизводительная MySQL — это сложно………………………………………………………………… 318

Практика: определение барьеров для сплит-брейна……………………………………………………………. 319

Практика: проверка на дрейф данных…………………………………………………………………………………… 321

Практика: хаос…………………………………………………………………………………………………………………………. 321

Глава 10. MySQL в облаке……………………………………………………………………. 323

Совместимость…………………………………………………………………………………………………………………………. 324

Управление (администрирование базы данных)………………………………………………………………….. 325

Сеть и хранилище… и… задержка…………………………………………………………………………………………… 328

Производительность — это деньги………………………………………………………………………………………… 329

Итоги…………………………………………………………………………………………………………………………………………. 331

Практика: попробуйте MySQL в облаке……………………………………………………………………………….. 332

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

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

Об обложке…………………………………………………………………………………………… 336

Daniel Nichter

Дэниэл Нихтер – архитекор баз данных, более 15 лет работает с MySQL. Увлёкся оптимизацией производительности MySQL ещё в 2004 году, работая в дата-центре. Из его заметок сложился блог HackMySQL.com, в котором он делился подробностями устройства MySQL и её инструментария. Затем 8 лет работал в компании Percona, где продолжал разрабатывать инструменты для оптимизации баз данных. Сегодня его инструменты де-факто служат эталоном для компаний во всём мире. Обладатель премии MySQL Community Award, выступает на конференциях, активно участвует в движении Open Source.

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

Представляем книгу “С++ — это просто”

С++ это просто

Доступно изложены основы синтаксиса языка C++ и объектно-ориентированного программирования. Описаны функции С++, подробно рассмотрены классы и объекты, инкапсуляция, наследование, полиморфизм, система ввода-вывода С++. Даны советы и рекомендации по разработке современных приложений. Приведены примеры использования шаблонов и библиотеки стандартных шаблонов, описана обработка исключений. Отдельная глава посвящена расширенным возможностям C++.

Для начинающих программистов

Вы изучите:

• Основы объектно-ориентированного программирования
• Синтаксис языка
• Функции С++
• Классы и объекты
• Наследование
• Полиморфизм
• Систему ввода-вывода в C++
• Использование шаблонов
• Обработку исключений
• Базовые принципы разработки современных приложений на С++

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

Об авторе……………………………………………………………………………………………….. 13

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

Предисловие к третьему изданию…………………………………………………………… 17

Предисловие к первому изданию……………………………………………………………. 19

Глава 1. Введение в ООП……………………………………………………………………….. 21

Истоки…………………………………………………………………………………………………………………………………………. 23

Структурное программирование……………………………………………………………………………………………… 24

Объектно-ориентированное программирование…………………………………………………………………….. 26

Характеристики объектно-ориентированных языков…………………………………………………………….. 28

Объекты………………………………………………………………………………………………………………………………. 28

Классы………………………………………………………………………………………………………………………………… 29

Инкапсуляция……………………………………………………………………………………………………………………… 29

Скрытие данных…………………………………………………………………………………………………………………. 29

Наследование…………………………………………………………………………………………………………………….. 30

Полиморфизм……………………………………………………………………………………………………………………… 31

Отношения включения……………………………………………………………………………………………………….. 31

Шаблоны…………………………………………………………………………………………………………………………….. 32

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

Многократное использование…………………………………………………………………………………………… 32

Упражнения………………………………………………………………………………………………………………………………… 33

Важное………………………………………………………………………………………………………………………………………… 35

Глава 2. Переходим на C++……………………………………………………………………. 37

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

Ввод и вывод в C++……………………………………………………………………………………………………………………. 40

Динамическое объявление переменных…………………………………………………………………………………… 42

Динамическая инициализация………………………………………………………………………………………………….. 43

Вывод типов……………………………………………………………………………………………………………………………….. 43

Синтаксис структуры (struct), объединения (union) и перечисления (enum)………………………… 43

Неименованные объединения и перечисления……………………………………………………………………….. 44

Приведение типов………………………………………………………………………………………………………………………. 45

Пустой указатель (void)…………………………………………………………………………………………………………….. 46

Оператор ::………………………………………………………………………………………………………………………………….. 46

Ссылки………………………………………………………………………………………………………………………………………… 47

Типы обращений к функциям……………………………………………………………………………………………………. 48

Возвращение значения по ссылке…………………………………………………………………………………………….. 51

Спецификатор const…………………………………………………………………………………………………………………… 52

Const-указатели………………………………………………………………………………………………………………….. 53

Const-ссылки………………………………………………………………………………………………………………………. 54

Возврат значений const-переменных……………………………………………………………………………….. 57

Функции-члены типа const………………………………………………………………………………………………… 57

Логический тип данных (bool)………………………………………………………………………………………………….. 58

Упражнения………………………………………………………………………………………………………………………………… 59

Важное………………………………………………………………………………………………………………………………………… 65

Глава 3. Функции………………………………………………………………………………….. 69

Строгая проверка типов……………………………………………………………………………………………………………. 71

Исходные значения для аргументов функции…………………………………………………………………………. 72

Перегрузка функции…………………………………………………………………………………………………………………… 73

Разница в типе возвращаемого значения…………………………………………………………………………. 74

Можно ли задать разные типы данных при помощи typedef?……………………………………….. 75

Можно ли задать разные типы данных при помощи const?…………………………………………… 75

Разные задачи, одно имя……………………………………………………………………………………………………. 76

Перегрузка операторов……………………………………………………………………………………………………………… 76

FAQ по перегрузке операторов…………………………………………………………………………………………. 79

Встраиваемые функции…………………………………………………………………………………………………………….. 79

Зачем полагаться на компилятор?……………………………………………………………………………………. 80

А где гарантия?…………………………………………………………………………………………………………………… 80

Когда ими пользоваться?…………………………………………………………………………………………………… 81

Новый синтаксис возвращаемого типа……………………………………………………………………………………. 81

Функции instance, static, virtual и friend…………………………………………………………………………………… 81

Упражнения………………………………………………………………………………………………………………………………… 82

Важное………………………………………………………………………………………………………………………………………… 85

Глава 4. Классы и объекты……………………………………………………………………. 87

Структуры и классы………………………………………………………………………………………………………………….. 89

Классы и конструкторы…………………………………………………………………………………………………………….. 92

Деструкторы………………………………………………………………………………………………………………………………. 94

Класс Complex……………………………………………………………………………………………………………………………. 95

Указатель this…………………………………………………………………………………………………………………………….. 97

Перегрузка унарных операторов……………………………………………………………………………………………… 98

Объекты и память…………………………………………………………………………………………………………………….. 100

Еще раз о структурах и классах…………………………………………………………………………………………….. 101

Идеальная организация программы………………………………………………………………………………………. 102

Упражнения……………………………………………………………………………………………………………………………… 106

Важное……………………………………………………………………………………………………………………………………… 112

Глава 5. Премудрости классов……………………………………………………………… 115

Статическое и динамическое выделение памяти………………………………………………………………….. 117

Выделение памяти для массивов и структур…………………………………………………………………. 118

Выделение памяти для объектов…………………………………………………………………………………….. 120

Статические члены класса……………………………………………………………………………………………………… 122

Универсальный спецификатор const……………………………………………………………………………………… 124

Перегруженный оператор присваивания и конструктор копирования………………………………. 126

Преобразование данных…………………………………………………………………………………………………………. 129

Преобразование между встроенными типами………………………………………………………………. 129

Преобразование между встроенными и пользовательскими типами………………………….. 130

Преобразование между различными пользовательскими типами данных………………… 132

Процедура преобразования в исходном объекте………………………………………………………….. 132

Процедура преобразования в целевом объекте…………………………………………………………….. 134

Упражнения……………………………………………………………………………………………………………………………… 137

Важное……………………………………………………………………………………………………………………………………… 139

Глава 6. Наследование…………………………………………………………………………. 141

Наследование…………………………………………………………………………………………………………………………… 143

Еще один пример наследования…………………………………………………………………………………………….. 147

Варианты применения наследования……………………………………………………………………………………. 149

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

Виды наследования…………………………………………………………………………………………………………………. 154

Одиночное наследование………………………………………………………………………………………………… 154

Многоуровневое наследование………………………………………………………………………………………. 155

Множественное наследование……………………………………………………………………………………….. 156

Предупреждение………………………………………………………………………………………………………………………. 157

Поэтапная разработка…………………………………………………………………………………………………………….. 158

Упражнения……………………………………………………………………………………………………………………………… 158

Важное……………………………………………………………………………………………………………………………………… 160

Глава 7. Полиморфизм…………………………………………………………………………. 163

Виртуальная функция……………………………………………………………………………………………………………… 165

Чистая виртуальная функция………………………………………………………………………………………………….. 167

Абстрактный класс………………………………………………………………………………………………………………….. 168

Связывание функций……………………………………………………………………………………………………………….. 168

Анатомия виртуальных функций……………………………………………………………………………………………. 170

Для чего применять виртуальные функции?…………………………………………………………………………. 177

Срезание объекта…………………………………………………………………………………………………………………….. 177

Виртуальные деструкторы……………………………………………………………………………………………………… 179

Вызов виртуальных функций из конструкторов/деструкторов…………………………………… 181

Виртуальные базовые классы………………………………………………………………………………………………… 181

Упражнения……………………………………………………………………………………………………………………………… 183

Важное……………………………………………………………………………………………………………………………………… 184

Глава 8. Система ввода-вывода в C++………………………………………………….. 187

Требования к системе ввода-вывода……………………………………………………………………………………… 189

Решение с использованием потоков в C++…………………………………………………………………………….. 190

Предопределенные потоковые объекты………………………………………………………………………………… 191

Библиотека iostream………………………………………………………………………………………………………………… 191

Класс istream……………………………………………………………………………………………………………………………. 192

Класс ostream…………………………………………………………………………………………………………………………… 194

Вывод символов в кодировке Unicode……………………………………………………………………………. 195

Класс iostream………………………………………………………………………………………………………………………….. 196

Манипуляторы потока……………………………………………………………………………………………………………. 196

Пользовательские манипуляторы………………………………………………………………………………………….. 199

Пользовательские манипуляторы с аргументами…………………………………………………………. 200

Работа с потоками ввода-вывода в файл………………………………………………………………………………. 202

Символьный ввод-вывод…………………………………………………………………………………………………………. 203

Открытие файла……………………………………………………………………………………………………………….. 203

Чтение данных………………………………………………………………………………………………………………….. 204

Обнаружение конца файла (EOF)…………………………………………………………………………………… 204

Закрытие файла……………………………………………………………………………………………………………….. 204

Программа копирования файлов……………………………………………………………………………………………. 204

Ввод-вывод строк…………………………………………………………………………………………………………………….. 205

Ввод-вывод записей…………………………………………………………………………………………………………………. 206

Прямой доступ…………………………………………………………………………………………………………………………. 208

Режимы открытия файла…………………………………………………………………………………………………………. 210

Строковые потоки……………………………………………………………………………………………………………………. 211

Работа с istrstream……………………………………………………………………………………………………………. 212

Ввод-вывод объектов………………………………………………………………………………………………………………. 213

Сериализация…………………………………………………………………………………………………………………………… 214

Обработка ошибок ввода-вывода………………………………………………………………………………………….. 215

Взаимодействие с файловой системой…………………………………………………………………………………… 217

Упражнения……………………………………………………………………………………………………………………………… 220

Важное……………………………………………………………………………………………………………………………………… 222

Глава 9. Расширенные возможности C++…………………………………………….. 225

Отношения включения…………………………………………………………………………………………………………….. 227

Дружественные (friend) функции и классы……………………………………………………………………………. 229

Еще одно применение дружественной функции……………………………………………………………………. 231

Предупреждение………………………………………………………………………………………………………………………. 234

Ключевое слово explicit………………………………………………………………………………………………………….. 234

Ключевое слово mutable…………………………………………………………………………………………………………. 236

Пространство имен………………………………………………………………………………………………………………….. 237

Способы применения пространства имен……………………………………………………………………………… 240

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

Ключевое слово using……………………………………………………………………………………………………… 241

Динамическая идентификация типа (RTTI)…………………………………………………………………………… 242

Приведение типов в C++………………………………………………………………………………………………………….. 244

static_cast………………………………………………………………………………………………………………………….. 245

dynamic_cast……………………………………………………………………………………………………………………… 246

const_cast………………………………………………………………………………………………………………………….. 248

reinterpret_cast…………………………………………………………………………………………………………………. 248

Предупреждение………………………………………………………………………………………………………………. 249

Указатели на члены классов…………………………………………………………………………………………………… 249

Упражнения……………………………………………………………………………………………………………………………… 253

Важное……………………………………………………………………………………………………………………………………… 254

Глава 10. Шаблоны……………………………………………………………………………… 257

Шаблоны функций…………………………………………………………………………………………………………………… 259

Что происходит во время компиляции?………………………………………………………………………….. 261

Шаблоны функций для пользовательских типов………………………………………………………………….. 261

Еще одна шаблонная функция……………………………………………………………………………………………….. 262

Явная специализация обобщенной функции…………………………………………………………………. 264

Функция с набором обобщенных типов………………………………………………………………………………… 264

Шаблоны и макросы……………………………………………………………………………………………………………….. 265

Сортировка на основе шаблона…………………………………………………………………………………………….. 266

Шаблоны классов……………………………………………………………………………………………………………………. 267

Шаблон класса связного списка…………………………………………………………………………………………….. 271

Полезные советы по шаблонам………………………………………………………………………………………………. 273

Вариативные шаблоны…………………………………………………………………………………………………………… 275

Области применения шаблонов……………………………………………………………………………………………… 276

Упражнения……………………………………………………………………………………………………………………………… 276

Важное……………………………………………………………………………………………………………………………………… 278

Глава 11. Обработка исключений………………………………………………………… 279

Обработка исключений в C++………………………………………………………………………………………………… 281

Работа с библиотечными классами исключений………………………………………………………………….. 284

Библиотечные исключения при создании очереди………………………………………………………. 286

Еще один пример……………………………………………………………………………………………………………… 288

Работа с пользовательскими классами исключений……………………………………………………………. 290

Полезные советы……………………………………………………………………………………………………………………… 292

Спецификация исключений…………………………………………………………………………………………………….. 293

Необработанные исключения………………………………………………………………………………………………… 294

Интеллектуальные указатели и динамические контейнеры………………………………………………… 295

Упражнения……………………………………………………………………………………………………………………………… 297

Важное……………………………………………………………………………………………………………………………………… 298

Глава 12. Стандартная библиотека шаблонов……………………………………… 301

Стандартная библиотека шаблонов……………………………………………………………………………………… 303

Компоненты STL……………………………………………………………………………………………………………………… 304

Контейнеры………………………………………………………………………………………………………………………. 304

Итераторы………………………………………………………………………………………………………………………… 305

Алгоритмы………………………………………………………………………………………………………………………… 306

Вектор (vector)………………………………………………………………………………………………………………………….. 307

Другие операции………………………………………………………………………………………………………………. 308

Вектор объектов класса Point…………………………………………………………………………………………………. 309

Список (list)………………………………………………………………………………………………………………………………. 311

Множество (set) и мультимножество (multi-set)…………………………………………………………………….. 313

Отображение (map) и мультиотображение (multi-map)………………………………………………………… 317

Стек (stack)……………………………………………………………………………………………………………………………….. 319

Очередь (queue)………………………………………………………………………………………………………………………… 320

Объект-функция………………………………………………………………………………………………………………… 322

Упражнения……………………………………………………………………………………………………………………………… 323

Важное……………………………………………………………………………………………………………………………………… 324

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

Яшавант Канеткар

Яшавант Канеткар — автор книг и курсов по языкам C, C++, Java, Python, структурам данных, .NET, IoT. Его книги переведены на хинди, гуджарати, японский, корейский и китайский языки. Получил степень бакалавра в Технологическом институте имени Веермата Джиджабая (VJTI, Мумбаи) и магистра технических наук в Индийском Институте Технологий (IIT, Канпур). В настоящее время является директором нескольких IT-компаний. Был удостоен множества престижных наград за свои предпринимательские, профессиональные и академические достижения, а также за вклад в IT-образование Индии.

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

Новинка: Django 4. Практика создания веб-сайтов на Python

Django 4. Практика создания веб-сайтов на Python

Описание

Книга посвящена разработке веб-сайтов на языке Python с применением веб-фреймворка Django. Представлены новинки Django 4 и дано наиболее полное описание его инструментов: моделей, контролеров, шаблонов, средств обработки пользовательского ввода, включая выгруженные файлы, разграничения доступа, посредников, сигналов, инструментов для отправки электронной почты, кэширования и пр. Рассмотрены дополнительные библиотеки, производящие обработку BBCode, CAPTCHA, вывод графических миниатюр, аутентификацию через социальные сети (в частности, “ВКонтакте”), интеграцию с Bootstrap. Рассказано о программировании веб-служб REST, использовании и настройке административного веб-сайта Django, публикации сайтов с помощью веб-сервера Uvicorn, работе с базами данных PostgreSQL, локализации строк, форматов и временных зон. Подробно описано создание полнофункционального веб-сайта — электронной доски объявлений.

Электронное приложение-архив на сайте издательства содержит коды всех примеров.

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

Python и Django — команда мечты!

Что такое веб-фреймворк?

Фреймворк (от англ. framework — каркас) — это программная библиотека, реализующая бОльшую часть типовой функциональности разрабатываемого продукта. То есть в полном смысле слова каркас, на который разработчик конкретного продукта «навешивает» свои узлы, механизмы и детали декора.
Веб-фреймворк — это фреймворк для программирования веб-сайтов. Как правило, он обеспечивает следующую типовую функциональность:

  • взаимодействие с базой данных — посредством единых инструментов, независимых от конкретной СУБД;
  • обработка клиентских запросов — в частности, определение, какая страница запрашивается;
  • генерирование запрашиваемых веб-страниц на основе шаблонов;
  • разграничение доступа — допуск к закрытым страницам только зарегистрированных пользователей и только после выполнения ими входа;
  • обработка данных, занесенных посетителями в веб-формы, — в частности, проверка их на корректность;
  • получение и сохранение файлов, выгруженных пользователями;
  • рассылка электронных писем;
  • кеширование сгенерированных страниц на стороне сервера — для повышения производительности;
  • локализация — перевод сайта на другие языки.

Внимание

Автор предполагает, что читатели этой книги знакомы с языками HTML, CSS, JavaScript, Python, принципами работы СУБД и имеют базовые навыки в веб-разработке. В книге все это описываться не будет.

Django — популярнейший в мире веб-фреймворк, написанный на языке Python, и один из наиболее распространенных веб-фреймворков в мире. Появившись в 2005 году — именно тогда вышла его первая версия, — он до сих пор остается «на коне».

Фреймвок получил название в честь французского джазового гитариста-виртуоза Джанго Рейнхардт (цыг. Django Reinhardt; настоящее имя Жан Ренарт, фр. Jean Reinhardt; 23 января 1910 — 16 мая 1953). Прозвище Рейнхардта «Django» на цыганском языке означает «я проснулся».

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

Предисловие…………………………………………………………………………………………… 19

Что такое веб-фреймворк?…………………………………………………………………………………………………………. 19

Почему Django?………………………………………………………………………………………………………………………….. 20

Что нового в Django 4.1 и новой книге?……………………………………………………………………………………. 21

Использованные программные продукты……………………………………………………………………………….. 21

Типографские соглашения………………………………………………………………………………………………………… 22

Часть I. Вводный курс…………………………………………………………………… 25

Глава 1. Основные понятия Django. Вывод данных………………………………. 27

1.1. Установка фреймворка……………………………………………………………………………………………………….. 27

1.2. Проект Django……………………………………………………………………………………………………………………… 28

1.3. Отладочный веб-сервер Django…………………………………………………………………………………………. 29

1.4. Приложения…………………………………………………………………………………………………………………………. 30

1.5. Контроллеры……………………………………………………………………………………………………………………….. 32

1.6. Маршруты и маршрутизатор…………………………………………………………………………………………….. 33

1.7. Модели…………………………………………………………………………………………………………………………………. 36

1.8. Миграции…………………………………………………………………………………………………………………………….. 38

1.9. Консоль Django…………………………………………………………………………………………………………………… 40

1.10. Работа с моделями……………………………………………………………………………………………………………. 40

1.11. Шаблоны……………………………………………………………………………………………………………………………. 44

1.12. Контекст шаблона, рендеринг и сокращения…………………………………………………………………. 46

1.13. Административный веб-сайт Django………………………………………………………………………………. 47

1.14. Параметры полей и моделей……………………………………………………………………………………………. 52

1.15. Редактор модели……………………………………………………………………………………………………………….. 53

Глава 2. Связи. Ввод данных. Статические файлы………………………………… 56

2.1. Связи между моделями……………………………………………………………………………………………………….. 56

2.2. Строковое представление модели…………………………………………………………………………………….. 58

2.3. URL-параметры и параметризованные запросы……………………………………………………………… 59

2.4. Обратное разрешение интернет-адресов………………………………………………………………………….. 63

2.5. Формы, связанные с моделями…………………………………………………………………………………………… 65

2.6. Контроллеры-классы………………………………………………………………………………………………………….. 65

2.7. Наследование шаблонов……………………………………………………………………………………………………. 68

2.8. Статические файлы…………………………………………………………………………………………………………….. 71

Часть II. Базовые инструменты Django………………………………… 75

Глава 3. Создание и настройка проекта…………………………………………………. 77

3.1. Подготовка к работе…………………………………………………………………………………………………………… 77

3.2. Создание проекта Django…………………………………………………………………………………………………… 79

3.3. Настройки проекта……………………………………………………………………………………………………………… 79

3.3.1. Основные настройки…………………………………………………………………………………………………….. 79

3.3.2. Параметры баз данных………………………………………………………………………………………………… 80

3.3.3. Список зарегистрированных приложений………………………………………………………………….. 83

3.3.4. Список зарегистрированных посредников…………………………………………………………………. 84

3.3.5. Языковые настройки…………………………………………………………………………………………………….. 85

3.3.6. Доступ к настройкам проекта из программного кода……………………………………………….. 88

3.3.7. Создание собственных настроек проекта…………………………………………………………………… 88

3.4. Создание, настройка и регистрация приложений……………………………………………………………. 89

3.4.1. Создание приложений………………………………………………………………………………………………….. 89

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

3.4.3. Регистрация приложений в проекте…………………………………………………………………………….. 90

3.5. Средства отладки……………………………………………………………………………………………………………….. 91

3.5.1. Отладочный веб-сервер Django…………………………………………………………………………………… 91

3.5.2. Веб-страница сообщения об ошибке…………………………………………………………………………… 92

3.6. Работа с несколькими базами данных………………………………………………………………………………. 94

3.6.1. Регистрация используемых баз данных……………………………………………………………………… 94

3.6.2. Диспетчеризация данных…………………………………………………………………………………………….. 95

3.6.2.1. Автоматическая диспетчеризация данных……………………………………………………… 95

3.6.2.2. Указание базы данных в административных командах………………………………… 98

3.6.2.3. Ручная диспетчеризация данных…………………………………………………………………….. 99

Глава 4. Модели: базовые инструменты……………………………………………….. 100

4.1. Объявление моделей…………………………………………………………………………………………………………. 100

4.2. Объявление полей модели………………………………………………………………………………………………… 101

4.2.1. Параметры, поддерживаемые полями всех типов……………………………………………………. 101

4.2.2. Классы полей моделей……………………………………………………………………………………………….. 103

4.2.3. Создание полей со списком……………………………………………………………………………………….. 107

4.3. Создание связей между моделями…………………………………………………………………………………… 110

4.3.1. Связь «один-со-многими»……………………………………………………………………………………………. 110

4.3.2. Связь «один-с-одним»…………………………………………………………………………………………………. 114

4.3.3. Связь «многие-со-многими»………………………………………………………………………………………… 115

4.4. Параметры самой модели………………………………………………………………………………………………… 117

4.4.1. Получение доступа к параметрам модели из программного кода…………………………. 124

4.5. Интернет-адрес модели и его формирование…………………………………………………………………. 124

4.6. Методы модели…………………………………………………………………………………………………………………. 125

4.7. Валидация модели. Валидаторы…………………………………………………………………………………….. 127

4.7.1. Стандартные валидаторы Django…………………………………………………………………………….. 127

4.7.2. Вывод собственных сообщений об ошибках……………………………………………………………. 131

4.7.3. Написание своих валидаторов………………………………………………………………………………….. 133

4.7.4. Валидация модели………………………………………………………………………………………………………. 134

4.8. Создание моделей на основе существующих баз данных……………………………………………. 136

Глава 5. Миграции……………………………………………………………………………….. 137

5.1. Генерирование миграций…………………………………………………………………………………………………. 137

5.2. Модули миграций……………………………………………………………………………………………………………… 139

5.3. Выполнение миграций……………………………………………………………………………………………………… 139

5.4. Вывод списка миграций……………………………………………………………………………………………………. 141

5.5. Оптимизация миграций…………………………………………………………………………………………………….. 141

5.6. Слияние миграций…………………………………………………………………………………………………………….. 142

5.7. Очистка моделей……………………………………………………………………………………………………………….. 143

5.8. Отмена миграций………………………………………………………………………………………………………………. 144

Глава 6. Запись данных……………………………………………………………………….. 145

6.1. Правка записей………………………………………………………………………………………………………………….. 145

6.2. Создание записей……………………………………………………………………………………………………………… 146

6.3. Занесение значений в поля разных типов………………………………………………………………………. 147

6.4. Сохранение записей…………………………………………………………………………………………………………. 149

6.4.1. Сохранение копий записей в разных базах данных………………………………………………… 150

6.5. Удаление записей……………………………………………………………………………………………………………… 151

6.6. Обработка связанных записей…………………………………………………………………………………………. 151

6.6.1. Обработка связи «один-со-многими»………………………………………………………………………… 152

6.6.2. Обработка связи «один-с-одним»………………………………………………………………………………. 153

6.6.3. Обработка связи «многие-со-многими»…………………………………………………………………….. 154

6.7. Произвольное переупорядочивание записей…………………………………………………………………. 156

6.8. Массовые добавление, правка и удаление записей………………………………………………………. 156

6.9. Выполнение валидации модели………………………………………………………………………………………. 159

6.10. Асинхронная запись данных…………………………………………………………………………………………. 160

Глава 7. Выборка данных…………………………………………………………………….. 161

7.1. Извлечение значений из полей записи…………………………………………………………………………….. 161

7.1.1. Получение значений из полей разных типов……………………………………………………………. 161

7.2. Доступ к связанным записям……………………………………………………………………………………………. 162

7.3. Выборка записей………………………………………………………………………………………………………………. 164

7.3.1. Выборка всех записей………………………………………………………………………………………………… 164

7.3.2. Извлечение одной записи…………………………………………………………………………………………… 165

7.3.3. Получение числа записей в наборе…………………………………………………………………………… 166

7.3.4. Поиск одной записи…………………………………………………………………………………………………….. 167

7.3.5. Фильтрация записей……………………………………………………………………………………………………. 168

7.3.6. Написание условий фильтрации……………………………………………………………………………….. 169

7.3.6.1. Написание условий фильтрации по значениям полей связанных записей… 172

7.3.6.2. Написание условий фильтрации по значениям полей типа JSON………………. 173

7.3.6.3. Сравнение со значениями других полей. Функциональные выражения……. 175

7.3.6.4. Сложные условия фильтрации. Выражения сравнения……………………………….. 176

7.3.7. Выборка уникальных записей…………………………………………………………………………………… 177

7.3.8. Выборка указанного числа записей………………………………………………………………………….. 178

7.3.9. Экономная выборка записей……………………………………………………………………………………… 178

7.4. Сортировка записей………………………………………………………………………………………………………….. 179

7.5. Агрегатные вычисления……………………………………………………………………………………………………. 181

7.5.1. Агрегатные вычисления по всем записям набора……………………………………………………. 181

7.5.2. Агрегатные вычисления по связанным записям……………………………………………………….. 182

7.5.3. Агрегатные функции…………………………………………………………………………………………………… 184

7.6. Вычисляемые поля……………………………………………………………………………………………………………. 186

7.7. Функциональные выражения: расширенные инструменты………………………………………….. 187

7.7.1. Функции СУБД……………………………………………………………………………………………………………. 187

7.7.1.1. Функции для работы со строками………………………………………………………………….. 187

7.7.1.2. Функции для работы с числами……………………………………………………………………… 190

7.7.1.3. Функции для работы с датой и временем……………………………………………………… 192

7.7.1.4. Функции для сравнения и преобразования значений…………………………………… 193

7.7.2. Условные выражения СУБД………………………………………………………………………………………. 195

7.7.3. Вложенные запросы……………………………………………………………………………………………………. 196

7.8. Объединение наборов записей………………………………………………………………………………………… 198

7.9. Извлечение значений только из заданных полей…………………………………………………………… 198

7.10. Указание базы данных для выборки записей………………………………………………………………. 201

7.11. Асинхронная выборка данных………………………………………………………………………………………. 201

Глава 8. Маршрутизация……………………………………………………………………… 203

8.1. Как работает маршрутизатор?……………………………………………………………………………………….. 203

8.1.1. Списки маршрутов уровня проекта и уровня приложения……………………………………… 204

8.2. Объявление маршрутов……………………………………………………………………………………………………. 205

8.3. Передача данных в контроллеры……………………………………………………………………………………. 207

8.4. Именованные маршруты………………………………………………………………………………………………….. 208

8.5. Имена приложений……………………………………………………………………………………………………………. 208

8.6. Псевдонимы приложений…………………………………………………………………………………………………. 209

8.7. Указание шаблонных путей в виде регулярных выражений………………………………………… 210

8.8. Настройки маршрутизатора……………………………………………………………………………………………. 211

Глава 9. Контроллеры-функции…………………………………………………………… 212

9.1. Написание контроллеров-функций…………………………………………………………………………………. 212

9.1.1. Контроллеры, выполняющие одну задачу……………………………………………………………….. 213

9.1.2. Контроллеры, выполняющие несколько задач………………………………………………………… 214

9.2. Получение сведений о запросе………………………………………………………………………………………… 215

9.3. Формирование ответа………………………………………………………………………………………………………. 218

9.3.1. Низкоуровневые средства для формирования ответа……………………………………………… 218

9.3.2. Формирование ответа на основе шаблона……………………………………………………………….. 220

9.3.3. Класс TemplateResponse: отложенный рендеринг шаблонов…………………………………. 221

9.4. Перенаправление………………………………………………………………………………………………………………. 222

9.5. Обратное разрешение интернет-адресов……………………………………………………………………….. 223

9.6. Уведомление об ошибках и особых ситуациях……………………………………………………………… 224

9.7. Специальные ответы………………………………………………………………………………………………………… 226

9.7.1. Потоковый ответ…………………………………………………………………………………………………………. 226

9.7.2. Отправка файлов…………………………………………………………………………………………………………. 227

9.7.3. Отправка данных в формате JSON…………………………………………………………………………….. 227

9.8. Сокращения Django………………………………………………………………………………………………………….. 228

9.9. Программное разрешение интернет-адресов…………………………………………………………………. 229

9.10. Дополнительные настройки контроллеров………………………………………………………………….. 231

9.11. Асинхронные контроллеры-функции……………………………………………………………………………. 232

Глава 10. Контроллеры-классы……………………………………………………………. 235

10.1. Введение в контроллеры-классы…………………………………………………………………………………… 235

10.2. Базовые контроллеры-классы……………………………………………………………………………………….. 236

10.2.1. Контроллер View: диспетчеризация по HTTP-методу…………………………………………… 236

10.2.2. Примесь ContextMixin: создание контекста шаблона…………………………………………… 238

10.2.3. Примесь TemplateResponseMixin: рендеринг шаблона………………………………………….. 238

10.2.4. Контроллер TemplateView: все вместе…………………………………………………………………….. 239

10.3. Классы, выводящие одну запись…………………………………………………………………………………… 240

10.3.1. Примесь SingleObjectMixin: поиск записи………………………………………………………………. 240

10.3.2. Примесь SingleObjectTemplateResponseMixin: рендеринг шаблона
на основе найденной записи………………………………………………………………………………………………… 241

10.3.3. Контроллер DetailView: все вместе…………………………………………………………………………. 242

10.4. Классы, выводящие наборы записей…………………………………………………………………………….. 243

10.4.1. Примесь MultipleObjectMixin: извлечение набора записей………………………………….. 243

10.4.2. Примесь MultipleObjectTemplateResponseMixin: рендеринг шаблона
на основе набора записей……………………………………………………………………………………………………. 246

10.4.3. Контроллер ListView: все вместе……………………………………………………………………………… 246

10.5. Классы, работающие с формами…………………………………………………………………………………… 247

10.5.1. Классы для вывода и валидации форм…………………………………………………………………… 247

10.5.1.1. Примесь FormMixin: создание формы…………………………………………………………. 247

10.5.1.2. Контроллер ProcessFormView: вывод и обработка формы……………………….. 249

10.5.1.3. Контроллер-класс FormView: создание, вывод и обработка формы………… 249

10.5.2. Классы для добавления, правки и удаления записей……………………………………………. 250

10.5.2.1. Примесь ModelFormMixin: создание формы, связанной с моделью…………. 251

10.5.2.2. Контроллер CreateView: создание новой записи……………………………………….. 252

10.5.2.3. Контроллер UpdateView: исправление записи…………………………………………… 252

10.5.2.4. Примесь DeletionMixin: удаление записи……………………………………………………. 253

10.5.2.5. Контроллер DeleteView: удаление записи с подтверждением………………….. 254

10.6. Классы для вывода хронологических списков…………………………………………………………….. 256

10.6.1. Вывод последних записей………………………………………………………………………………………… 256

10.6.1.1. Примесь DateMixin: фильтрация записей по дате………………………………………. 256

10.6.1.2. Контроллер BaseDateListView: базовый класс…………………………………………… 256

10.6.1.3. Контроллер ArchiveIndexView: вывод последних записей………………………… 257

10.6.2. Вывод записей по годам…………………………………………………………………………………………… 258

10.6.2.1. Примесь YearMixin: извлечение года…………………………………………………………… 258

10.6.2.2. Контроллер YearArchiveView: вывод записей за год………………………………….. 259

10.6.3. Вывод записей по месяцам………………………………………………………………………………………. 260

10.6.3.1. Примесь MonthMixin: извлечение месяца……………………………………………………. 260

10.6.3.2. Контроллер MonthArchiveView: вывод записей за месяц………………………….. 260

10.6.4. Вывод записей по неделям……………………………………………………………………………………….. 261

10.6.4.1. Примесь WeekMixin: извлечение номера недели………………………………………… 261

10.6.4.2. Контроллер WeekArchiveView: вывод записей за неделю…………………………. 262

10.6.5. Вывод записей по дням…………………………………………………………………………………………….. 262

10.6.5.1. Примесь DayMixin: извлечение заданного числа……………………………………….. 263

10.6.5.2. Контроллер DayArchiveView: вывод записей за день………………………………… 263

10.6.6. Контроллер TodayArchiveView: вывод записей за текущее число……………………….. 264

10.6.7. Контроллер DateDetailView: вывод одной записи за указанное число……………….. 264

10.7. Контроллер RedirectView: перенаправление……………………………………………………………….. 265

10.8. Контроллеры-классы смешанной функциональности………………………………………………… 267

10.9. Асинхронные контроллеры-классы………………………………………………………………………………. 268

Глава 11. Шаблоны и статические файлы: базовые инструменты……….. 270

11.1. Настройки проекта, касающиеся шаблонов………………………………………………………………… 270

11.2. Вывод данных. Директивы…………………………………………………………………………………………….. 275

11.3. Теги шаблонизатора………………………………………………………………………………………………………. 276

11.4. Фильтры…………………………………………………………………………………………………………………………… 283

11.5. Наследование шаблонов……………………………………………………………………………………………….. 292

11.6. Включение шаблонов…………………………………………………………………………………………………….. 294

11.7. Обработка статических файлов…………………………………………………………………………………….. 295

11.7.1. Настройка подсистемы статических файлов…………………………………………………………. 295

11.7.2. Формирование интернет-адресов статических файлов………………………………………… 297

Глава 12. Пагинатор…………………………………………………………………………….. 299

12.1. Класс Paginator: сам пагинатор. Создание пагинатора…………………………………………….. 299

12.2. Класс Page: часть пагинатора. Вывод пагинатора…………………………………………………….. 302

Глава 13. Формы, связанные с моделями……………………………………………… 303

13.1. Создание форм, связанных с моделями………………………………………………………………………… 303

13.1.1. Создание форм с помощью фабрики классов…………………………………………………………. 303

13.1.2. Создание форм путем быстрого объявления………………………………………………………….. 305

13.1.3. Создание форм путем полного объявления……………………………………………………………. 306

13.1.3.1. Как выполняется полное объявление?………………………………………………………… 306

13.1.3.2. Параметры, поддерживаемые всеми типами полей…………………………………… 308

13.1.3.3. Классы полей форм……………………………………………………………………………………….. 309

13.1.3.4. Классы полей форм, применяемые по умолчанию…………………………………….. 313

13.1.4. Задание элементов управления……………………………………………………………………………….. 314

13.1.4.1. Классы элементов управления…………………………………………………………………….. 314

13.1.4.2. Элементы управления, применяемые по умолчанию………………………………… 317

13.2. Обработка форм……………………………………………………………………………………………………………… 318

13.2.1. Добавление записи посредством формы………………………………………………………………… 318

13.2.1.1. Создание формы для добавления записи……………………………………………………. 318

13.2.1.2. Повторное создание формы………………………………………………………………………….. 318

13.2.1.3. Валидация данных, занесенных в форму……………………………………………………. 319

13.2.1.4. Сохранение данных, занесенных в форму………………………………………………….. 320

13.2.1.5. Доступ к данным, занесенным в форму……………………………………………………….. 321

13.2.2. Правка записи посредством формы………………………………………………………………………… 321

13.2.3. Некоторые соображения касательно удаления записей………………………………………. 322

13.3. Вывод форм на экран……………………………………………………………………………………………………… 323

13.3.1. Быстрый вывод форм………………………………………………………………………………………………… 323

13.3.2. Расширенный вывод форм……………………………………………………………………………………….. 325

13.4. Валидация в формах………………………………………………………………………………………………………. 327

13.4.1. Валидация полей формы………………………………………………………………………………………….. 327

13.4.1.1. Валидация с применением валидаторов…………………………………………………….. 327

13.4.1.2. Валидация путем переопределения методов формы…………………………………. 328

13.4.2. Валидация формы…………………………………………………………………………………………………….. 328

Глава 14. Наборы форм, связанные с моделями……………………………………. 330

14.1. Создание наборов форм, связанных с моделями…………………………………………………………. 330

14.2. Обработка наборов форм, связанных с моделями……………………………………………………….. 334

14.2.1. Создание набора форм, связанного с моделью……………………………………………………… 334

14.2.2. Повторное создание набора форм…………………………………………………………………………… 334

14.2.3. Валидация и сохранение набора форм…………………………………………………………………… 335

14.2.4. Доступ к данным, занесенным в набор форм…………………………………………………………. 336

14.2.5. Реализация переупорядочивания записей……………………………………………………………… 337

14.3. Вывод наборов форм на экран………………………………………………………………………………………. 338

14.3.1. Быстрый вывод наборов форм…………………………………………………………………………………. 338

14.3.2. Расширенный вывод наборов форм………………………………………………………………………… 339

14.4. Валидация в наборах форм……………………………………………………………………………………………. 341

14.5. Встроенные наборы форм……………………………………………………………………………………………… 342

14.5.1. Создание встроенных наборов форм………………………………………………………………………. 342

14.5.2. Обработка встроенных наборов форм……………………………………………………………………. 342

Глава 15. Разграничение доступа: базовые инструменты…………………….. 344

15.1. Как работает подсистема разграничения доступа?……………………………………………………. 344

15.2. Подготовка подсистемы разграничения доступа………………………………………………………… 345

15.2.1. Настройка подсистемы разграничения доступа……………………………………………………. 345

15.2.2. Создание суперпользователя…………………………………………………………………………………… 346

15.2.3. Смена пароля пользователя…………………………………………………………………………………….. 347

15.3. Работа со списками пользователей и групп…………………………………………………………………. 347

15.3.1. Список пользователей………………………………………………………………………………………………. 347

15.3.2. Группы пользователей. Список групп…………………………………………………………………….. 349

15.4. Вход, выход и служебные процедуры………………………………………………………………………….. 350

15.4.1. Контроллер LoginView: вход на сайт……………………………………………………………………… 350

15.4.2. Контроллер LogoutView: выход с сайта…………………………………………………………………. 352

15.4.3. Контроллер PasswordChangeView: смена пароля…………………………………………………. 354

15.4.4. Контроллер PasswordChangeDoneView: уведомление об успешной смене пароля 355

15.4.5. Контроллер PasswordResetView: отправка письма для сброса пароля……………….. 355

15.4.6. Контроллер PasswordResetDoneView: уведомление об отправке письма для сброса пароля              357

15.4.7. Контроллер PasswordResetConfirmView: собственно сброс пароля……………………. 358

15.4.8. Контроллер PasswordResetCompleteView: уведомление об успешном сбросе пароля……….. 359

15.5. Получение сведений о пользователях…………………………………………………………………………… 360

15.5.1. Получение сведений о текущем пользователе……………………………………………………….. 360

15.5.2. Получение пользователей, обладающих заданным правом………………………………… 363

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

15.6.1. Авторизация в контроллерах…………………………………………………………………………………… 364

15.6.1.1. Авторизация в контроллерах-функциях: непосредственные проверки……. 364

15.6.1.2. Авторизация в контроллерах-функциях: применение декораторов…………. 365

15.6.1.3. Авторизация в контроллерах-классах………………………………………………………… 367

15.6.2. Авторизация в шаблонах…………………………………………………………………………………………. 369

Часть III. Расширенные инструменты
и дополнительные библиотеки…………………………………………….. 371

Глава 16. Модели: расширенные инструменты…………………………………….. 373

16.1. Управление выборкой полей…………………………………………………………………………………………. 373

16.2. Связи «многие-со-многими» с дополнительными данными………………………………………… 377

16.3. Полиморфные связи………………………………………………………………………………………………………… 380

16.4. Наследование моделей…………………………………………………………………………………………………… 384

16.4.1. Прямое наследование моделей………………………………………………………………………………… 384

16.4.2. Абстрактные модели………………………………………………………………………………………………… 386

16.4.3. Прокси-модели………………………………………………………………………………………………………….. 387

16.5. Создание своих диспетчеров записей…………………………………………………………………………… 388

16.5.1. Создание диспетчеров записей……………………………………………………………………………….. 388

16.5.2. Создание диспетчеров обратной связи…………………………………………………………………… 390

16.6. Создание своих наборов записей………………………………………………………………………………….. 391

16.7. Управление транзакциями……………………………………………………………………………………………… 393

16.7.1. Автоматическое управление транзакциями…………………………………………………………… 393

16.7.1.1. Режим по умолчанию: каждая операция — в отдельной транзакции………. 394

16.7.1.2. Режим атомарных запросов…………………………………………………………………………. 394

16.7.1.3. Режим по умолчанию на уровне контроллера……………………………………………. 395

16.7.1.4. Режим атомарных запросов на уровне контроллера…………………………………. 395

16.7.2. Ручное управление транзакциями…………………………………………………………………………… 397

16.7.3. Обработка подтверждения транзакции………………………………………………………………….. 399

Глава 17. Формы и наборы форм: расширенные инструменты и дополнительная библиотека  400

17.1. Формы, не связанные с моделями………………………………………………………………………………….. 400

17.2. Наборы форм, не связанные с моделями………………………………………………………………………. 401

17.3. Расширенные средства для вывода форм и наборов форм…………………………………………. 403

17.3.1. Указание CSS-стилей у форм…………………………………………………………………………………… 403

17.3.2. Настройка выводимых форм……………………………………………………………………………………. 403

17.3.3. Настройка наборов форм…………………………………………………………………………………………. 404

17.3.4. Шаблоны форм, наборов форм и элементов управления……………………………………… 405

17.3.4.1. Шаблоны форм………………………………………………………………………………………………. 406

17.3.4.2. Шаблоны наборов форм……………………………………………………………………………….. 408

17.3.4.3. Шаблоны элементов управления…………………………………………………………………. 408

17.4. Библиотека Django Simple Captcha: поддержка CAPTCHA……………………………………….. 410

17.4.1. Установка Django Simple Captcha…………………………………………………………………………… 411

17.4.2. Использование Django Simple Captcha…………………………………………………………………… 411

17.4.3. Настройка Django Simple Captcha………………………………………………………………………….. 413

17.4.4. Дополнительные команды captcha_clean и captcha_create_pool………………………… 414

17.5. Дополнительные настройки проекта, имеющие отношение к формам……………………… 415

Глава 18. Поддержка баз данных PostgreSQL
и библиотека django-localflavor…………………………………………………………….. 416

18.1. Дополнительные инструменты для поддержки PostgreSQL………………………………………… 416

18.1.1. Объявление моделей для работы с PostgreSQL………………………………………………………. 416

18.1.1.1. Поля, специфические для PostgreSQL…………………………………………………………… 416

18.1.1.2. Индексы PostgreSQL………………………………………………………………………………………. 419

18.1.1.3. Операционные выражения……………………………………………………………………………. 421

18.1.1.4. Условие ExclusionConstraint………………………………………………………………………… 422

18.1.1.5. Расширения PostgreSQL………………………………………………………………………………… 424

18.1.1.6. Валидаторы PostgreSQL……………………………………………………………………………….. 425

18.1.2. Запись и выборка данных в PostgreSQL………………………………………………………………….. 427

18.1.2.1. Запись и выборка значений полей в PostgreSQL…………………………………………. 427

18.1.2.2. Фильтрация записей в PostgreSQL……………………………………………………………….. 430

18.1.3. Агрегатные функции PostgreSQL……………………………………………………………………………… 435

18.1.4. Функции СУБД, специфичные для PostgreSQL……………………………………………………….. 438

18.1.5. Вложенные запросы PostgreSQL……………………………………………………………………………… 438

18.1.6. Полнотекстовая фильтрация PostgreSQL………………………………………………………………… 439

18.1.6.1. Модификатор search……………………………………………………………………………………… 439

18.1.6.2. Функции СУБД для полнотекстовой фильтрации………………………………………. 440

18.1.6.3. Функции СУБД для фильтрации по похожим словам………………………………… 445

18.1.7. Создание форм для работы с PostgreSQL……………………………………………………………….. 447

18.1.7.1. Поля форм, специфические для PostgreSQL…………………………………………………. 447

18.1.7.2. Элементы управления, специфические для PostgreSQL……………………………… 449

18.2. Библиотека django-localflavor: дополнительные поля для моделей и форм……………… 449

18.2.1. Установка django-localflavor……………………………………………………………………………………. 450

18.2.2. Поля модели, предоставляемые django-localflavor………………………………………………… 450

18.2.3. Поля формы, предоставляемые django-localflavor…………………………………………………. 451

18.2.4. Элементы управления, предоставляемые django-localflavor………………………………… 451

Глава 19. Шаблоны: расширенные инструменты
и дополнительные библиотеки…………………………………………………………….. 452

19.1. Библиотека django-precise-bbcode: поддержка BBCode……………………………………………… 452

19.1.1. Установка django-precise-bbcode…………………………………………………………………………….. 452

19.1.2. Поддерживаемые BBCode-теги……………………………………………………………………………….. 453

19.1.3. Обработка BBCode…………………………………………………………………………………………………… 454

19.1.3.1. Обработка BBCode при выводе…………………………………………………………………… 454

19.1.3.2. Хранение BBCode в модели…………………………………………………………………………. 455

19.1.4. Создание дополнительных BBCode-тегов……………………………………………………………… 456

19.1.5. Создание графических смайликов…………………………………………………………………………… 458

19.1.6. Настройка django-precise-bbcode…………………………………………………………………………….. 458

19.2. Библиотека django-bootstrap5: интеграция с Bootstrap 5……………………………………………. 459

19.2.1. Установка django-bootstrap5……………………………………………………………………………………. 460

19.2.2. Использование django-bootstrap5……………………………………………………………………………. 460

19.2.3. Настройка django-bootstrap5…………………………………………………………………………………… 465

19.3. Написание своих фильтров и тегов……………………………………………………………………………….. 467

19.3.1. Организация исходного кода…………………………………………………………………………………… 467

19.3.2. Написание фильтров………………………………………………………………………………………………… 467

19.3.2.1. Написание и использование простейших фильтров………………………………….. 467

19.3.2.2. Управление заменой недопустимых знаков HTML……………………………………. 469

19.3.3. Написание тегов……………………………………………………………………………………………………….. 470

19.3.3.1. Написание тегов, выводящих элементарные значения……………………………… 470

19.3.3.2. Написание шаблонных тегов……………………………………………………………………….. 472

19.3.4. Регистрация фильтров и тегов………………………………………………………………………………….. 473

19.4. Переопределение шаблонов………………………………………………………………………………………….. 474

Глава 20. Обработка выгруженных файлов…………………………………………. 476

20.1. Подготовка подсистемы обработки выгруженных файлов………………………………………… 476

20.1.1. Настройка подсистемы обработки выгруженных файлов……………………………………. 476

20.1.2. Указание маршрута для выгруженных файлов……………………………………………………… 478

20.2. Хранение файлов в моделях…………………………………………………………………………………………… 479

20.2.1. Типы полей модели, предназначенные для хранения файлов……………………………… 479

20.2.2. Поля форм, валидаторы и элементы управления, служащие для указания файлов 481

20.2.3. Обработка выгруженных файлов……………………………………………………………………………. 482

20.2.4. Вывод выгруженных файлов……………………………………………………………………………………. 484

20.2.5. Удаление выгруженного файла……………………………………………………………………………….. 485

20.3. Хранение путей к файлам в моделях…………………………………………………………………………….. 485

20.4. Низкоуровневые средства для сохранения выгруженных файлов…………………………….. 486

20.4.1. Класс UploadedFile: выгруженный файл. Сохранение выгруженных файлов……. 486

20.4.2. Вывод выгруженных файлов низкоуровневыми средствами………………………………… 488

20.5. Библиотека django-cleanup: автоматическое удаление ненужных файлов………………. 489

20.6. Библиотека easy-thumbnails: вывод миниатюр……………………………………………………………. 490

20.6.1. Установка easy-thumbnails………………………………………………………………………………………. 490

20.6.2. Настройка easy-thumbnails………………………………………………………………………………………. 491

20.6.2.1. Пресеты миниатюр………………………………………………………………………………………… 491

20.6.2.2. Остальные настройки библиотеки………………………………………………………………. 493

20.6.3. Вывод миниатюр в шаблонах………………………………………………………………………………….. 495

20.6.4. Хранение миниатюр в моделях……………………………………………………………………………….. 496

20.6.5. Дополнительная команда thumbnail_cleanup………………………………………………………… 497

Глава 21. Разграничение доступа: расширенные инструменты и дополнительная библиотека  498

21.1. Настройки проекта, касающиеся разграничения доступа…………………………………………. 498

21.2. Работа с пользователями……………………………………………………………………………………………….. 499

21.2.1. Создание пользователей………………………………………………………………………………………….. 499

21.2.2. Работа с паролями……………………………………………………………………………………………………. 499

21.3. Вход и выход…………………………………………………………………………………………………………………… 500

21.4. Валидация паролей………………………………………………………………………………………………………… 501

21.4.1. Стандартные валидаторы паролей………………………………………………………………………… 501

21.4.2. Написание своих валидаторов паролей…………………………………………………………………. 503

21.4.3. Выполнение валидации паролей…………………………………………………………………………….. 504

21.5. Библиотека Python Social Auth: регистрация и вход через социальные сети……………. 505

21.5.1. Создание приложения «ВКонтакте»……………………………………………………………………….. 505

21.5.2. Установка и настройка Python Social Auth…………………………………………………………….. 506

21.5.3. Использование Python Social Auth…………………………………………………………………………… 508

21.6. Создание своей модели пользователя…………………………………………………………………………… 508

21.7. Создание своих прав пользователя………………………………………………………………………………. 510

Глава 22. Посредники и обработчики контекста………………………………….. 511

22.1. Посредники……………………………………………………………………………………………………………………… 511

22.1.1. Стандартные посредники………………………………………………………………………………………… 511

22.1.2. Порядок выполнения посредников………………………………………………………………………….. 512

22.1.3. Написание своих посредников………………………………………………………………………………… 513

22.1.3.1. Посредники-функции…………………………………………………………………………………….. 513

22.1.3.2. Посредники-классы……………………………………………………………………………………….. 514

22.1.3.3. Асинхронные и универсальные посредники………………………………………………. 516

22.2. Обработчики контекста………………………………………………………………………………………………….. 519

Глава 23. Cookie, сессии, всплывающие сообщения
и подписывание данных………………………………………………………………………. 521

23.1. Cookie………………………………………………………………………………………………………………………………. 521

23.2. Сессии………………………………………………………………………………………………………………………………. 524

23.2.1. Настройка сессий……………………………………………………………………………………………………… 524

23.2.2. Использование сессий………………………………………………………………………………………………. 526

23.2.3. Дополнительная команда clearsessions………………………………………………………………….. 528

23.3. Всплывающие сообщения……………………………………………………………………………………………… 528

23.3.1. Настройка всплывающих сообщений…………………………………………………………………….. 528

23.3.2. Уровни всплывающих сообщений…………………………………………………………………………… 529

23.3.3. Создание всплывающих сообщений……………………………………………………………………….. 530

23.3.4. Вывод всплывающих сообщений……………………………………………………………………………. 531

23.3.5. Объявление своих уровней всплывающих сообщений………………………………………….. 533

23.4. Подписывание данных…………………………………………………………………………………………………… 533

Глава 24. Сигналы……………………………………………………………………………….. 537

24.1. Обработка сигналов……………………………………………………………………………………………………….. 537

24.1.1. Объявление обработчиков сигналов……………………………………………………………………….. 537

24.1.2. Явная привязка обработчиков к сигналам……………………………………………………………… 538

24.1.3. Неявная привязка обработчиков к сигналам………………………………………………………….. 539

24.1.4. Отмена привязки обработчиков к сигналам…………………………………………………………… 540

24.2. Встроенные сигналы Django………………………………………………………………………………………….. 540

24.3. Объявление своих сигналов…………………………………………………………………………………………… 545

Глава 25. Отправка электронных писем………………………………………………. 547

25.1. Настройка подсистемы отправки электронных писем……………………………………………….. 547

25.2. Низкоуровневые инструменты для отправки писем……………………………………………………. 549

25.2.1. Класс EmailMessage: обычное электронное письмо……………………………………………… 549

25.2.2. Формирование писем на основе шаблонов…………………………………………………………….. 551

25.2.3. Использование соединений. Массовая рассылка писем……………………………………….. 551

25.2.4. Класс EmailMultiAlternatives: составное письмо…………………………………………………… 552

25.3. Высокоуровневые инструменты для отправки писем…………………………………………………. 553

25.3.1. Отправка писем по произвольным адресам……………………………………………………………. 553

25.3.2. Отправка писем зарегистрированным пользователям………………………………………….. 554

25.3.3. Отправка писем администраторам и редакторам сайта………………………………………. 555

25.4. Отправка тестового электронного письма……………………………………………………………………. 556

Глава 26. Кеширование………………………………………………………………………… 557

26.1. Кеширование на стороне сервера…………………………………………………………………………………. 557

26.1.1. Подготовка подсистемы кеширования на стороне сервера………………………………….. 557

26.1.1.1. Настройка подсистемы кеширования на стороне сервера……………………….. 557

26.1.1.2. Создание таблицы для хранения кеша……………………………………………………….. 562

26.1.2. Высокоуровневые средства кеширования……………………………………………………………… 562

26.1.2.1. Кеширование всего веб-сайта………………………………………………………………………. 562

26.1.2.2. Кеширование на уровне отдельных контроллеров……………………………………. 564

26.1.2.3. Управление кешированием…………………………………………………………………………… 564

26.1.3. Низкоуровневые средства кеширования………………………………………………………………… 565

26.1.3.1. Кеширование фрагментов веб-страниц……………………………………………………….. 566

26.1.3.2. Кеширование произвольных значений……………………………………………………….. 567

26.1.3.3. Асинхронные инструменты для кеширования произвольных значений….. 570

26.2. Кеширование на стороне клиента…………………………………………………………………………………. 570

26.2.1. Автоматическая обработка заголовков………………………………………………………………….. 570

26.2.2. Управление кешированием в контроллерах…………………………………………………………… 571

26.2.2.1. Условная обработка запросов……………………………………………………………………… 571

26.2.2.2. Прямое указание параметров кеширования……………………………………………….. 573

26.2.2.3. Запрет кеширования……………………………………………………………………………………… 573

26.2.3. Управление кешированием в посредниках…………………………………………………………….. 574

Глава 27. Локализация…………………………………………………………………………. 576

27.1. Локализация строк………………………………………………………………………………………………………….. 576

27.1.1. Пометка локализуемых строк………………………………………………………………………………….. 576

27.1.1.1. Пометка локализуемых строк в коде шаблонов…………………………………………. 577

27.1.1.2. Пометка локализуемых строк в Python-коде………………………………………………. 579

27.1.2. Создание языковых модулей……………………………………………………………………………………. 582

27.1.2.1. Генерирование языковых модулей………………………………………………………………. 582

27.1.2.2. Перевод локализуемых строк………………………………………………………………………. 583

27.1.2.3. Компиляция языковых модулей…………………………………………………………………… 585

27.1.3. Переключение веб-сайта на требуемый язык…………………………………………………………. 586

27.1.3.1. Автоматическое переключение на требуемый язык…………………………………… 586

27.1.3.2. Вывод сведений о поддерживаемых языках……………………………………………….. 587

27.1.3.3. Создание языковых редакций веб-сайта…………………………………………………….. 589

27.1.3.4. Переключение на требуемый язык без создания языковых редакций
веб-сайта……………………………………………………………………………………………………………………….. 591

27.1.4. Дополнительные инструменты для локализации строк………………………………………… 593

27.1.5. Настройка локализации строк………………………………………………………………………………… 593

27.2. Локализация форматов…………………………………………………………………………………………………… 595

27.3. Локализация временнх зон………………………………………………………………………………………….. 596

27.3.1. Реализация переключения веб-сайта на требуемую временню зону…………………. 596

27.3.2. Вывод значений времени и временнх отметок в разных временнх зонах………. 598

Глава 28. Административный веб-сайт Django…………………………………….. 601

28.1. Подготовка административного веб-сайта к работе…………………………………………………… 601

28.2. Регистрация моделей на административном веб-сайте………………………………………………. 602

28.3. Редакторы моделей…………………………………………………………………………………………………………. 603

28.3.1. Параметры списка записей………………………………………………………………………………………. 603

28.3.1.1. Параметры списка записей: состав выводимого списка……………………………. 603

28.3.1.2. Параметры списка записей: фильтрация и сортировка…………………………….. 608

28.3.1.3. Параметры списка записей: прочие…………………………………………………………….. 612

28.3.2. Параметры страниц добавления и правки записей……………………………………………….. 614

28.3.2.1. Параметры страниц добавления и правки записей:
набор выводимых полей……………………………………………………………………………………………… 614

28.3.2.2. Параметры страниц добавления и правки записей: элементы управления 617

28.3.2.3. Параметры страниц добавления и правки записей: прочие……………………… 620

28.3.3. Регистрация редакторов на административном веб-сайте…………………………………… 621

28.4. Встроенные редакторы………………………………………………………………………………………………….. 622

28.4.1. Объявление встроенного редактора……………………………………………………………………….. 622

28.4.2. Параметры встроенного редактора………………………………………………………………………… 622

28.4.3. Регистрация встроенного редактора………………………………………………………………………. 624

28.5. Действия…………………………………………………………………………………………………………………………… 625

Глава 29. Разработка веб-служб REST.
Библиотека Django REST framework…………………………………………………….. 628

29.1. Установка и подготовка к работе Django REST framework………………………………………… 629

29.2. Введение в Django REST framework. Вывод данных…………………………………………………… 631

29.2.1. Сериализаторы…………………………………………………………………………………………………………. 631

29.2.2. Веб-представление JSON………………………………………………………………………………………….. 632

29.2.3. Вывод данных на стороне клиента…………………………………………………………………………. 634

29.2.4. Первый принцип REST: идентификация ресурса по интернет-адресу………………… 635

29.3. Ввод и правка данных……………………………………………………………………………………………………. 637

29.3.1. Второй принцип REST: идентификация действия по HTTP-методу…………………….. 637

29.3.2. Парсеры веб-форм…………………………………………………………………………………………………….. 641

29.4. Контроллеры-классы Django REST framework……………………………………………………………. 642

29.4.1. Контроллер-класс низкого уровня………………………………………………………………………….. 642

29.4.2. Контроллеры-классы высокого уровня: комбинированные и простые……………….. 643

29.5. Метаконтроллеры…………………………………………………………………………………………………………… 644

29.6. Разграничение доступа в Django REST framework……………………………………………………… 646

29.6.1. Третий принцип REST: данные клиента хранятся на стороне клиента………………. 646

29.6.2. Классы разграничения доступа………………………………………………………………………………. 647

Глава 30. Средства журналирования……………………………………………………. 649

30.1. Настройка подсистемы журналирования…………………………………………………………………….. 649

30.2. Объект сообщения…………………………………………………………………………………………………………… 650

30.3. Форматировщики……………………………………………………………………………………………………………. 651

30.4. Фильтры…………………………………………………………………………………………………………………………… 652

30.5. Обработчики……………………………………………………………………………………………………………………. 653

30.6. Регистраторы…………………………………………………………………………………………………………………… 658

30.7. Пример настройки подсистемы журналирования……………………………………………………….. 660

Глава 31. Публикация веб-сайта………………………………………………………….. 663

31.1. Подготовка веб-сайта к публикации…………………………………………………………………………….. 663

31.1.1. Написание шаблонов веб-страниц с сообщениями об ошибках………………………….. 663

31.1.2. Указание настроек эксплуатационного режима……………………………………………………. 664

31.1.3. Удаление ненужных данных……………………………………………………………………………………. 666

31.1.4. Окончательная проверка веб-сайта………………………………………………………………………… 666

31.1.5. Настройка веб-сайта для работы по протоколу HTTPS……………………………………….. 668

31.2. Публикация веб-сайта……………………………………………………………………………………………………. 672

31.2.1. Публикация посредством Uvicorn……………………………………………………………………………. 672

31.2.1.1. Подготовка веб-сайта к публикации посредством Uvicorn……………………….. 673

31.2.1.2. Запуск и остановка Uvicorn………………………………………………………………………….. 674

31.2.2. Другие варианты публикации…………………………………………………………………………………. 675

Часть IV. Практическое занятие: разработка веб-сайта.. 677

Глава 32. Дизайн. Вспомогательные веб-страницы………………………………. 679

32.1. План веб-сайта………………………………………………………………………………………………………………… 679

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

32.2.1. Создание и настройка проекта………………………………………………………………………………… 680

32.2.2. Создание и настройка приложения main………………………………………………………………… 681

32.3. Базовый шаблон……………………………………………………………………………………………………………… 681

32.4. Главная веб-страница…………………………………………………………………………………………………….. 688

32.5. Вспомогательные веб-страницы……………………………………………………………………………………. 690

Глава 33. Работа с пользователями и разграничение доступа………………. 693

33.1. Модель пользователя……………………………………………………………………………………………………… 693

33.2. Основные веб-страницы: входа, профиля и выхода……………………………………………………. 695

33.2.1. Веб-страница входа………………………………………………………………………………………………….. 695

33.2.2. Веб-страница пользовательского профиля…………………………………………………………….. 697

33.2.3. Реализация выхода…………………………………………………………………………………………………… 698

33.3. Веб-страницы правки личных данных пользователя………………………………………………….. 699

33.3.1. Веб-страница правки основных сведений………………………………………………………………. 699

33.3.2. Веб-страница правки пароля…………………………………………………………………………………… 702

33.4. Веб-страницы регистрации и активации пользователей…………………………………………….. 703

33.4.1. Веб-страницы регистрации нового пользователя………………………………………………….. 703

33.4.1.1. Форма для занесения сведений о новом пользователе………………………………. 703

33.4.1.2. Средства для регистрации пользователя……………………………………………………. 705

33.4.1.3. Средства для отправки писем с требованиями активации………………………… 707

33.4.2. Веб-страницы активации пользователя………………………………………………………………….. 709

33.5. Веб-страница удаления пользователя………………………………………………………………………….. 711

33.6. Инструменты для администрирования пользователей……………………………………………….. 713

Глава 34. Рубрики………………………………………………………………………………… 715

34.1. Модели рубрик……………………………………………………………………………………………………………….. 715

34.1.1. Базовая модель рубрик…………………………………………………………………………………………….. 715

34.1.2. Модель надрубрик……………………………………………………………………………………………………. 716

34.1.3. Модель подрубрик……………………………………………………………………………………………………. 717

34.2. Инструменты для администрирования рубрик……………………………………………………………. 718

34.3. Вывод списка рубрик в вертикальной панели навигации…………………………………………… 719

Глава 35. Объявления………………………………………………………………………….. 722

35.1. Подготовка к обработке выгруженных файлов……………………………………………………………. 722

35.2. Модели объявлений и дополнительных иллюстраций……………………………………………….. 723

35.2.1. Модель самих объявлений……………………………………………………………………………………….. 723

35.2.2. Модель дополнительных иллюстраций…………………………………………………………………. 726

35.2.3. Реализация удаления объявлений в модели пользователя……………………………………. 726

35.3. Инструменты для администрирования объявлений…………………………………………………….. 727

35.4. Вывод объявлений………………………………………………………………………………………………………….. 727

35.4.1. Вывод списка объявлений………………………………………………………………………………………… 728

35.4.1.1. Форма поиска и контроллер списка объявлений……………………………………….. 728

35.4.1.2. Реализация корректного возврата……………………………………………………………….. 729

35.4.1.3. Шаблон веб-страницы списка объявлений…………………………………………………. 731

35.4.2. Веб-страница сведений о выбранном объявлении………………………………………………… 734

35.4.3. Вывод последних 10 объявлений на главной веб-странице…………………………………. 738

35.5. Работа с объявлениями…………………………………………………………………………………………………… 738

35.5.1. Вывод объявлений, оставленных текущим пользователем…………………………………… 738

35.5.2. Добавление, правка и удаление объявлений………………………………………………………….. 739

Глава 36. Комментарии………………………………………………………………………… 743

36.1. Подготовка к выводу CAPTCHA……………………………………………………………………………………. 743

36.2. Модель комментария……………………………………………………………………………………………………… 744

36.3. Вывод и добавление комментариев………………………………………………………………………………. 745

36.4. Отправка уведомлений о новых комментариях…………………………………………………………… 748

Глава 37. Веб-служба REST………………………………………………………………….. 750

37.1. Веб-служба……………………………………………………………………………………………………………………… 750

37.1.1. Подготовка к разработке веб-службы…………………………………………………………………….. 750

37.1.2. Список объявлений…………………………………………………………………………………………………… 751

37.1.3. Сведения о выбранном объявлении………………………………………………………………………… 752

37.1.4. Вывод и добавление комментариев………………………………………………………………………… 753

37.2. Тестовый фронтенд…………………………………………………………………………………………………………. 755

37.2.1. Введение в Angular……………………………………………………………………………………………………. 755

37.2.2. Подготовка к разработке фронтенда………………………………………………………………………. 756

37.2.3. Метамодуль приложения AppModule. Маршрутизация в Angular……………………….. 757

37.2.4. Компонент приложения AppComponent………………………………………………………………….. 761

37.2.5. Служба BbService. Внедрение зависимостей. Объекты-обещания………………………. 762

37.2.6. Компонент списка объявлений BbListComponent. Директивы. Фильтры. Связывание данных            766

37.2.7. Компонент сведений об объявлении BbDetailComponent.
Двустороннее связывание данных………………………………………………………………………………………. 770

Заключение………………………………………………………………………………………….. 775

Приложение. Описание электронного архива………………………………………. 777

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

 

Дронов Владимир Александрович, профессиональный программист, писатель и журналист, работает с компьютерами с 1987 года. Автор более 30 популярных компьютерных книг, в том числе «Django 2.1. Практика создания веб-сайтов на Python», “HTML, JavaScript, PHP и MySQL. Джентльменский набор Web-мастера“, «Python 3. Самое необходимое», «Python 3 и PyQt 5. Разработка приложений», “Laravel. Быстрая разработка современных динамических Web-сайтов на PHP, MySQL, HTML и CSS“, “Angular 4. Быстрая разработка сверхдинамических Web-сайтов на TypeScript и PHP” и книг по продуктам Adobe Flash и Adobe Dreamweaver различных версий. Его статьи публикуются в журналах “Мир ПК” и “ИнтерФейс” (Израиль) и интернет-порталах “IZ City” и “TheVista.ru”.