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

Новинка: “Экскурс в неопределенное поведение C++”

Экскурс в неопределенное поведение C++

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

Для специалистов по C++ и другим языкам для системного и низкоуровневого программирования

Вы изучили C++ за 21 день и уже готовы использовать его во всех своих проектах? Погодите, есть кое-что еще!

За последние годы особенно остро поднят вопрос безопасности при разработке программного обеспечения: операционных систем, драйверов, веб-серверов и облачных платформ. C++ считается одним из самых небезопасных языков программирования, который широко используются в реальных программах. С 2023 года звучат призывы избегать языка C++ из-за того, что в нём не гарантирована безопасность памяти: 70% всех уязвимостей в программном обеспечении так или иначе оказывались связаны с работой с памятью.

В этой книге приводится множество разнообразных примеров из реальной практики, демонстрирующих, как даже самый безобидный на первый взгляд код на C++ или C может скрывать в себе невероятные ошибки. Всё это из-за множества явных и неявных случаев неопределенного поведения, и лишь некоторые такие случаи описаны в стандартах этих языков. На страницах книги вы увидите, как истинные условия могут стать ложными, а недостижимый код начать выполняться, как код, работающий на вашей машине, перестанет работать у вашего коллеги, и как, добавив журналирование, можно «починить» код на время. С неопределенным поведением возможно всё!

  • Десятки историй о неоднозначных и сомнительных решениях в дизайне языка С++, приводящих к многим часам отладки в реальных проектах
  • Самые неожиданные ошибки и как они проявляются
  • Советы как избежать встречи с одним из самых загадочных “зверей” в разработке на C++ и других языках для системного и низкоуровневого программирования — неопределенным поведением

Книгу “Экскурс в неопределенное поведение C++” можно купить в нашем интенет-магазине.

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

Встречайте: “Django 5. Практика создания веб-сайтов на Python”

Django 5. Практика создания веб-сайтов на Python

Книга посвящена разработке веб-сайтов на языке Python с применением веб-фреймворка Django 5.1. Представлены новинки Django и дано наиболее полное описание его инструментов и средств: моделей, миграций, контролеров, шаблонов, обработки пользовательского ввода, разграничения доступа, посредников, сигналов, отправки электронной почты, локализации, кеширования, работы с базами данных PostgreSQL, поддержке нескольких веб-сайтов, простых страниц, статичных перенаправлений, жетонной аутентификации и др.  Описаны полезные дополнительные библиотеки, реализующие обработку BBCode, CAPTCHA, вывод графических миниатюр, интеграцию с Bootstrap. Рассказано о программировании веб-служб REST, настройке встроенного административного веб-сайта и публикации готового сайта посредством веб-серверов Uvicorn и Apache HTTP Server. Подробно описано создание полнофункционального веб-сайта — электронной доски объявлений.

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

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

Python и Django — веб-разработка на современном уровне

Что такое веб-фреймворк?

Фреймворк (от англ. framework — каркас) — это программная библиотека, реализующая бОльшую часть типовой функциональности разрабатываемого продукта. То есть в полном смысле слова каркас, на который разработчик конкретного продукта «навешивает» свои узлы, механизмы и детали декора.
Веб-фреймворк — это фреймворк для программирования веб-сайтов. Как правило, он обеспечивает следующую типовую функциональность:

  • взаимодействие с базой данных — посредством единых инструментов, независимых от конкретной СУБД;
  • обработка клиентских запросов — в частности, определение, какая страница запрашивается;
  • генерирование запрашиваемых веб-страниц на основе шаблонов;
  • разграничение доступа — допуск к закрытым страницам только зарегистрированных пользователей и только после выполнения ими входа;
  • обработка данных, занесенных посетителями в веб-формы, — в частности, проверка их на корректность;
  • получение и сохранение файлов, выгруженных пользователями;
  • рассылка электронных писем;
  • кеширование сгенерированных страниц на стороне сервера — для повышения производительности;
  • локализация — перевод сайта на другие языки.

Внимание

Автор предполагает, что читатели этой книги знакомы с языками HTML, CSS, JavaScript, Python, принципами работы СУБД и имеют базовые навыки в веб-разработке. В книге все это описываться не будет.

Django — популярнейший в мире веб-фреймворк, написанный на языке Python, и один из наиболее распространенных веб-фреймворков в мире. Появившись в 2005 году — именно тогда вышла его первая версия, — он до сих пор остается «на коне».

Фреймвок получил название в честь французского джазового гитариста-виртуоза Джанго Рейнхардт (цыг. Django Reinhardt; настоящее имя Жан Ренарт, фр. Jean Reinhardt; 23 января 1910 — 16 мая 1953). Прозвище Рейнхардта «Django» на цыганском языке означает «я проснулся».

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

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

Что такое веб-фреймворк?…………………………………………………………………………………………………………. 19

Почему Django?………………………………………………………………………………………………………………………….. 20

Что нового в Django 5.1 и этой книге?……………………………………………………………………………………… 21

Использованные программные продукты……………………………………………………………………………….. 22

Типографские соглашения………………………………………………………………………………………………………… 22

Часть I. Вводный курс…………………………………………………………………… 25

Глава 1. Основные понятия Django. Вывод данных………………………………. 26

1.1. Установка фреймворка……………………………………………………………………………………………………….. 26

1.2. Проект Django……………………………………………………………………………………………………………………… 27

1.3. Отладочный веб-сервер Django…………………………………………………………………………………………. 28

1.4. Приложения…………………………………………………………………………………………………………………………. 29

1.5. Контроллеры……………………………………………………………………………………………………………………….. 31

1.6. Маршруты и маршрутизатор…………………………………………………………………………………………….. 32

1.7. Модели…………………………………………………………………………………………………………………………………. 35

1.8. Миграции…………………………………………………………………………………………………………………………….. 37

1.9. Консоль Django…………………………………………………………………………………………………………………… 39

1.10. Работа с моделями……………………………………………………………………………………………………………. 39

1.11. Шаблоны……………………………………………………………………………………………………………………………. 43

1.12. Контекст шаблона, рендеринг и сокращения…………………………………………………………………. 44

1.13. Административный веб-сайт Django………………………………………………………………………………. 46

1.14. Параметры полей и моделей……………………………………………………………………………………………. 51

1.15. Редактор модели……………………………………………………………………………………………………………….. 52

Глава 2. Связи. Ввод данных. Статические файлы………………………………… 54

2.1. Связи между моделями……………………………………………………………………………………………………….. 54

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

2.3. URL-параметры и параметризованные запросы……………………………………………………………… 57

2.4. Обратное разрешение интернет-адресов………………………………………………………………………….. 61

2.5. Формы, связанные с моделями…………………………………………………………………………………………… 63

2.6. Контроллеры-классы………………………………………………………………………………………………………….. 63

2.7. Наследование шаблонов……………………………………………………………………………………………………. 66

2.8. Статические файлы…………………………………………………………………………………………………………….. 69

Часть II. Базовые инструменты Django………………………………… 73

Глава 3. Создание и настройка проекта…………………………………………………. 74

3.1. Подготовка к работе…………………………………………………………………………………………………………… 74

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

3.3. Настройки проекта……………………………………………………………………………………………………………… 76

3.3.1. Основные настройки…………………………………………………………………………………………………….. 76

3.3.2. Параметры баз данных………………………………………………………………………………………………… 77

3.3.3. Список зарегистрированных приложений………………………………………………………………….. 79

3.3.4. Список зарегистрированных посредников…………………………………………………………………. 80

3.3.5. Языковые настройки…………………………………………………………………………………………………….. 82

3.3.6. Доступ к настройкам проекта из программного кода……………………………………………….. 85

3.3.7. Создание собственных настроек проекта…………………………………………………………………… 85

3.4. Создание, настройка и регистрация приложений……………………………………………………………. 86

3.4.1. Создание приложений………………………………………………………………………………………………….. 86

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

3.4.3. Регистрация приложений в проекте…………………………………………………………………………….. 87

3.5. Средства отладки……………………………………………………………………………………………………………….. 88

3.5.1. Отладочный веб-сервер Django…………………………………………………………………………………… 88

3.5.2. Веб-страница сообщения об ошибке…………………………………………………………………………… 89

3.6. Работа с несколькими базами данных………………………………………………………………………………. 91

3.6.1. Регистрация используемых баз данных……………………………………………………………………… 91

3.6.2. Диспетчеризация данных…………………………………………………………………………………………….. 92

3.6.2.1. Автоматическая диспетчеризация данных……………………………………………………….. 92

3.6.2.2. Указание базы данных в административных командах………………………………….. 95

3.6.2.3. Ручная диспетчеризация данных………………………………………………………………………. 96

Глава 4. Модели: базовые инструменты…………………………………………………. 97

4.1. Объявление моделей…………………………………………………………………………………………………………… 97

4.2. Объявление полей модели………………………………………………………………………………………………….. 98

4.2.1. Параметры, поддерживаемые полями всех типов……………………………………………………… 98

4.2.2. Классы полей моделей……………………………………………………………………………………………….. 101

4.2.3. Создание полей со списком……………………………………………………………………………………….. 105

4.3. Создание связей между моделями…………………………………………………………………………………… 109

4.3.1. Связь «один-со-многими»……………………………………………………………………………………………. 109

4.3.2. Связь «один-с-одним»…………………………………………………………………………………………………. 113

4.3.3. Связь «многие-со-многими»………………………………………………………………………………………… 114

4.4. Параметры самой модели………………………………………………………………………………………………… 116

4.4.1. Получение доступа к параметрам модели из программного кода…………………………. 123

4.5. Интернет-адрес модели и его формирование…………………………………………………………………. 124

4.6. Методы модели…………………………………………………………………………………………………………………. 125

4.7. Валидация модели. Валидаторы…………………………………………………………………………………….. 127

4.7.1. Стандартные валидаторы Django…………………………………………………………………………….. 127

4.7.2. Вывод собственных сообщений об ошибках……………………………………………………………. 132

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. Оптимизация миграций…………………………………………………………………………………………………….. 142

5.6. Слияние миграций…………………………………………………………………………………………………………….. 142

5.7. Очистка моделей……………………………………………………………………………………………………………….. 143

5.8. Отмена миграций………………………………………………………………………………………………………………. 144

Глава 6. Запись данных……………………………………………………………………….. 145

6.1. Правка записей………………………………………………………………………………………………………………….. 145

6.2. Создание записей……………………………………………………………………………………………………………… 146

6.3. Занесение значений в поля разных типов………………………………………………………………………. 147

6.4. Сохранение записей…………………………………………………………………………………………………………. 150

6.4.1. Сохранение копий записей в разных базах данных………………………………………………… 151

6.5. Удаление записей……………………………………………………………………………………………………………… 151

6.6. Обработка связанных записей…………………………………………………………………………………………. 152

6.6.1. Обработка связи «один-со-многими»………………………………………………………………………… 152

6.6.2. Обработка связи «один-с-одним»………………………………………………………………………………. 154

6.6.3. Обработка связи «многие-со-многими»…………………………………………………………………….. 155

6.7. Произвольное переупорядочивание записей…………………………………………………………………. 156

6.8. Массовые добавление, правка и удаление записей………………………………………………………. 157

6.9. Выполнение валидации модели………………………………………………………………………………………. 160

6.10. Асинхронная запись данных…………………………………………………………………………………………. 161

Глава 7. Выборка данных…………………………………………………………………….. 162

7.1. Извлечение значений из полей записи…………………………………………………………………………….. 162

7.1.1. Извлечение значений из полей разных типов…………………………………………………………… 162

7.2. Доступ к связанным записям……………………………………………………………………………………………. 163

7.3. Выборка записей………………………………………………………………………………………………………………. 165

7.3.1. Выборка всех записей………………………………………………………………………………………………… 165

7.3.2. Извлечение одной записи…………………………………………………………………………………………… 166

7.3.3. Получение числа записей в наборе…………………………………………………………………………… 167

7.3.4. Поиск записи……………………………………………………………………………………………………………….. 168

7.3.5. Фильтрация записей……………………………………………………………………………………………………. 169

7.3.6. Написание условий фильтрации……………………………………………………………………………….. 170

7.3.6.1. Написание условий фильтрации по значениям полей связанных записей….. 173

7.3.6.2. Написание условий фильтрации по значениям полей типа JSON………………… 174

7.3.6.3. Сравнение со значениями других полей. Функциональные выражения……… 176

7.3.6.4. Сложные условия фильтрации. Выражения сравнения…………………………………. 177

7.3.7. Выборка уникальных записей…………………………………………………………………………………… 179

7.3.8. Выборка указанного числа записей………………………………………………………………………….. 179

7.3.9. Экономная выборка записей……………………………………………………………………………………… 179

7.4. Сортировка записей………………………………………………………………………………………………………….. 180

7.5. Агрегатные вычисления……………………………………………………………………………………………………. 182

7.5.1. Агрегатные вычисления по всем записям набора……………………………………………………. 182

7.5.2. Агрегатные вычисления по связанным записям……………………………………………………….. 183

7.5.3. Агрегатные функции…………………………………………………………………………………………………… 185

7.6. Оконные вычисления………………………………………………………………………………………………………… 187

7.6.1. Выполнение оконных вычислений……………………………………………………………………………. 187

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

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

7.7. Вычисляемые поля уровня запроса………………………………………………………………………………… 196

7.8. Функциональные выражения: расширенные инструменты………………………………………….. 197

7.8.1. Функции СУБД……………………………………………………………………………………………………………. 197

7.8.1.1. Функции для работы со строками……………………………………………………………………. 197

7.8.1.2. Функции для работы с числами……………………………………………………………………….. 200

7.8.1.3. Функции для работы с датой и временем……………………………………………………….. 202

7.8.1.4. Функции для сравнения и преобразования значений…………………………………….. 204

7.8.2. Условные выражения СУБД………………………………………………………………………………………. 206

7.8.3. Вложенные запросы……………………………………………………………………………………………………. 207

7.8.4. Извлечение значений из полей типа JSON………………………………………………………………… 208

7.9. Объединение наборов записей………………………………………………………………………………………… 209

7.10. Извлечение значений только из заданных полей…………………………………………………………. 210

7.11. Указание базы данных для выборки записей………………………………………………………………. 213

7.12. Асинхронная выборка данных………………………………………………………………………………………. 213

Глава 8. Маршрутизация……………………………………………………………………… 215

8.1. Как работает маршрутизатор?……………………………………………………………………………………….. 215

8.1.1. Списки маршрутов уровня проекта и уровня приложения……………………………………… 216

8.2. Объявление маршрутов……………………………………………………………………………………………………. 217

8.3. Передача данных в контроллеры……………………………………………………………………………………. 219

8.4. Именованные маршруты………………………………………………………………………………………………….. 220

8.5. Имена приложений……………………………………………………………………………………………………………. 220

8.6. Псевдонимы приложений…………………………………………………………………………………………………. 221

8.7. Указание шаблонных путей в виде регулярных выражений………………………………………… 222

8.8. Настройки маршрутизатора……………………………………………………………………………………………. 223

Глава 9. Контроллеры-функции…………………………………………………………… 224

9.1. Написание контроллеров-функций…………………………………………………………………………………. 224

9.1.1. Контроллеры, выполняющие одну задачу……………………………………………………………….. 225

9.1.2. Контроллеры, выполняющие несколько задач………………………………………………………… 226

9.2. Получение сведений о запросе………………………………………………………………………………………… 227

9.3. Формирование ответа………………………………………………………………………………………………………. 230

9.3.1. Низкоуровневые средства для формирования ответа……………………………………………… 230

9.3.2. Формирование ответа на основе шаблона……………………………………………………………….. 231

9.3.3. Класс TemplateResponse: отложенный рендеринг шаблонов…………………………………. 233

9.4. Перенаправление………………………………………………………………………………………………………………. 234

9.5. Обратное разрешение интернет-адресов……………………………………………………………………….. 235

9.6. Уведомление об ошибках и особых ситуациях……………………………………………………………… 237

9.7. Специальные ответы………………………………………………………………………………………………………… 238

9.7.1. Потоковый ответ…………………………………………………………………………………………………………. 238

9.7.2. Файловый ответ…………………………………………………………………………………………………………… 239

9.7.3. JSON-ответ…………………………………………………………………………………………………………………… 240

9.8. Сокращения Django………………………………………………………………………………………………………….. 240

9.9. Программное разрешение интернет-адресов…………………………………………………………………. 242

9.10. Дополнительные настройки контроллеров………………………………………………………………….. 243

9.11. Асинхронные контроллеры-функции……………………………………………………………………………. 244

9.11.1. Преобразование синхронных функций в асинхронные и наоборот…………………….. 245

9.11.2. Обработка прерываний……………………………………………………………………………………………. 247

9.12. Асинхронные инструменты для формирования ответов…………………………………………….. 247

Глава 10. Контроллеры-классы……………………………………………………………. 249

10.1. Введение в контроллеры-классы…………………………………………………………………………………… 249

10.2. Базовые контроллеры-классы……………………………………………………………………………………….. 250

10.2.1. Контроллер View: диспетчеризация по HTTP-методу…………………………………………… 250

10.2.2. Примесь ContextMixin: создание контекста шаблона…………………………………………… 252

10.2.3. Примесь TemplateResponseMixin: рендеринг шаблона………………………………………….. 252

10.2.4. Контроллер TemplateView: все вместе…………………………………………………………………….. 253

10.3. Классы, выводящие одну запись…………………………………………………………………………………… 254

10.3.1. Примесь SingleObjectMixin: поиск записи………………………………………………………………. 254

10.3.2. Примесь SingleObjectTemplateResponseMixin: рендеринг шаблона
на основе найденной записи………………………………………………………………………………………………… 255

10.3.3. Контроллер DetailView: все вместе…………………………………………………………………………. 256

10.4. Классы, выводящие наборы записей…………………………………………………………………………….. 257

10.4.1. Примесь MultipleObjectMixin: извлечение набора записей………………………………….. 258

10.4.2. Примесь MultipleObjectTemplateResponseMixin: рендеринг шаблона
на основе набора записей……………………………………………………………………………………………………. 260

10.4.3. Контроллер ListView: все вместе……………………………………………………………………………… 261

10.5. Классы, работающие с формами…………………………………………………………………………………… 261

10.5.1. Классы для вывода и валидации форм…………………………………………………………………… 262

10.5.1.1. Примесь FormMixin: создание формы…………………………………………………………… 262

10.5.1.2. Контроллер ProcessFormView: вывод и обработка формы…………………………. 263

10.5.1.3. Контроллер-класс FormView: создание, вывод и обработка формы………….. 264

10.5.2. Классы для добавления, правки и удаления записей……………………………………………. 265

10.5.2.1. Примесь ModelFormMixin: создание формы, связанной с моделью…………… 265

10.5.2.2. Контроллер CreateView: создание новой записи…………………………………………. 266

10.5.2.3. Контроллер UpdateView: исправление записи…………………………………………….. 267

10.5.2.4. Примесь DeletionMixin: удаление записи……………………………………………………… 268

10.5.2.5. Контроллер DeleteView: удаление записи с подтверждением……………………. 268

10.6. Классы для вывода хронологических списков…………………………………………………………….. 270

10.6.1. Вывод последних записей………………………………………………………………………………………… 270

10.6.1.1. Примесь DateMixin: фильтрация записей по дате………………………………………… 270

10.6.1.2. Контроллер BaseDateListView: базовый класс…………………………………………….. 271

10.6.1.3. Контроллер ArchiveIndexView: вывод последних записей………………………….. 272

10.6.2. Вывод записей по годам…………………………………………………………………………………………… 273

10.6.2.1. Примесь YearMixin: извлечение года…………………………………………………………….. 273

10.6.2.2. Контроллер YearArchiveView: вывод записей за год……………………………………. 274

10.6.3. Вывод записей по месяцам………………………………………………………………………………………. 275

10.6.3.1. Примесь MonthMixin: извлечение месяца……………………………………………………… 275

10.6.3.2. Контроллер MonthArchiveView: вывод записей за месяц……………………………. 275

10.6.4. Вывод записей по неделям……………………………………………………………………………………….. 276

10.6.4.1. Примесь WeekMixin: извлечение номера недели………………………………………….. 276

10.6.4.2. Контроллер WeekArchiveView: вывод записей за неделю…………………………… 277

10.6.5. Вывод записей по дням…………………………………………………………………………………………….. 277

10.6.5.1. Примесь DayMixin: извлечение заданного числа…………………………………………. 278

10.6.5.2. Контроллер DayArchiveView: вывод записей за день………………………………….. 278

10.6.6. Контроллер TodayArchiveView: вывод записей за текущее число……………………….. 279

10.6.7. Контроллер DateDetailView: вывод одной записи за указанное число……………….. 279

10.7. Контроллер RedirectView: перенаправление……………………………………………………………….. 280

10.8. Контроллеры-классы смешанной функциональности………………………………………………… 282

10.9. Асинхронные контроллеры-классы………………………………………………………………………………. 283

Глава 11. Шаблоны и статические файлы: базовые инструменты……….. 285

11.1. Настройки проекта, касающиеся шаблонов………………………………………………………………… 285

11.2. Вывод данных. Директивы…………………………………………………………………………………………….. 290

11.3. Теги шаблонизатора………………………………………………………………………………………………………. 291

11.4. Фильтры…………………………………………………………………………………………………………………………… 300

11.5. Наследование шаблонов……………………………………………………………………………………………….. 310

11.6. Включение шаблонов…………………………………………………………………………………………………….. 312

11.7. Обработка статических файлов…………………………………………………………………………………….. 312

11.7.1. Настройка подсистемы статических файлов…………………………………………………………. 312

11.7.2. Формирование интернет-адресов статических файлов………………………………………… 314

11.8. Вывод значений в «человеческом» представлении……………………………………………………… 316

Глава 12. Пагинатор…………………………………………………………………………….. 318

12.1. Класс Paginator: сам пагинатор. Создание пагинатора…………………………………………….. 318

12.2. Класс Page: часть пагинатора. Вывод пагинатора…………………………………………………….. 321

Глава 13. Формы, связанные с моделями……………………………………………… 323

13.1. Создание форм, связанных с моделями………………………………………………………………………… 323

13.1.1. Создание форм с помощью фабрики классов…………………………………………………………. 323

13.1.2. Создание форм путем быстрого объявления………………………………………………………….. 326

13.1.3. Создание форм путем полного объявления……………………………………………………………. 327

13.1.3.1. Как выполняется полное объявление?………………………………………………………….. 327

13.1.3.2. Параметры, поддерживаемые всеми типами полей формы………………………… 329

13.1.3.3. Классы полей форм…………………………………………………………………………………………. 330

13.1.3.4. Классы полей форм, применяемые по умолчанию………………………………………. 334

13.1.4. Задание элементов управления……………………………………………………………………………….. 335

13.1.4.1. Классы элементов управления………………………………………………………………………. 335

13.1.4.2. Элементы управления, применяемые по умолчанию………………………………….. 338

13.2. Обработка форм……………………………………………………………………………………………………………… 339

13.2.1. Добавление записи посредством формы………………………………………………………………… 339

13.2.1.1. Создание формы для добавления записи……………………………………………………… 339

13.2.1.2. Повторное создание формы……………………………………………………………………………. 339

13.2.1.3. Валидация данных, занесенных в форму……………………………………………………… 340

13.2.1.4. Сохранение данных, занесенных в форму……………………………………………………. 341

13.2.1.5. Доступ к данным, занесенным в форму…………………………………………………………. 342

13.2.2. Правка записи посредством формы………………………………………………………………………… 342

13.2.3. Некоторые соображения касательно удаления записей………………………………………. 343

13.3. Вывод форм на экран……………………………………………………………………………………………………… 344

13.3.1. Быстрый вывод форм………………………………………………………………………………………………… 344

13.3.2. Расширенный вывод форм……………………………………………………………………………………….. 346

13.3.2.1. Расширенный вывод форм: высокоуровневые инструменты………………………. 346

13.3.2.2. Расширенный вывод форм: низкоуровневые инструменты…………………………. 347

13.4. Валидация в формах………………………………………………………………………………………………………. 350

13.4.1. Валидация полей формы………………………………………………………………………………………….. 350

13.4.1.1. Валидация с применением валидаторов………………………………………………………. 350

13.4.1.2. Валидация путем переопределения методов формы…………………………………… 351

13.4.2. Валидация формы…………………………………………………………………………………………………….. 351

Глава 14. Наборы форм, связанные с моделями……………………………………. 353

14.1. Создание наборов форм, связанных с моделями…………………………………………………………. 353

14.2. Обработка наборов форм, связанных с моделями……………………………………………………….. 357

14.2.1. Создание набора форм, связанного с моделью……………………………………………………… 357

14.2.2. Повторное создание набора форм…………………………………………………………………………… 357

14.2.3. Валидация и сохранение набора форм…………………………………………………………………… 358

14.2.4. Доступ к данным, занесенным в набор форм…………………………………………………………. 358

14.2.5. Реализация переупорядочивания записей……………………………………………………………… 359

14.3. Вывод наборов форм на экран………………………………………………………………………………………. 361

14.3.1. Быстрый вывод наборов форм…………………………………………………………………………………. 361

14.3.2. Расширенный вывод наборов форм………………………………………………………………………… 362

14.4. Валидация в наборах форм……………………………………………………………………………………………. 363

14.5. Встроенные наборы форм……………………………………………………………………………………………… 364

14.5.1. Создание встроенных наборов форм………………………………………………………………………. 364

14.5.2. Обработка встроенных наборов форм……………………………………………………………………. 365

Глава 15. Разграничение доступа: базовые инструменты…………………….. 367

15.1. Как работает подсистема разграничения доступа?……………………………………………………. 367

15.2. Подготовка подсистемы разграничения доступа………………………………………………………… 368

15.2.1. Настройка подсистемы разграничения доступа……………………………………………………. 368

15.2.2. Создание суперпользователя…………………………………………………………………………………… 369

15.2.3. Смена пароля пользователя…………………………………………………………………………………….. 370

15.3. Работа со списками пользователей и групп…………………………………………………………………. 370

15.3.1. Список пользователей………………………………………………………………………………………………. 370

15.3.2. Группы пользователей. Список групп…………………………………………………………………….. 372

15.4. Вход, выход и служебные процедуры………………………………………………………………………….. 373

15.4.1. Контроллер LoginView: вход на сайт……………………………………………………………………… 373

15.4.2. Контроллер LogoutView: выход с сайта…………………………………………………………………. 375

15.4.3. Контроллер PasswordChangeView: смена пароля…………………………………………………. 377

15.4.4. Контроллер PasswordChangeDoneView: уведомление об успешной смене пароля 378

15.4.5. Контроллер PasswordResetView: отправка письма для сброса пароля……………….. 378

15.4.6. Контроллер PasswordResetDoneView: уведомление об отправке письма для сброса пароля              380

15.4.7. Контроллер PasswordResetConfirmView: собственно сброс пароля……………………. 381

15.4.8. Контроллер PasswordResetCompleteView: уведомление об успешном сбросе пароля……….. 382

15.5. Получение сведений о пользователях…………………………………………………………………………… 383

15.5.1. Получение сведений о текущем пользователе……………………………………………………….. 383

15.5.2. Получение пользователей, обладающих заданным правом………………………………… 386

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

15.6.1. Авторизация на уровне всего веб-сайта…………………………………………………………………. 387

15.6.2. Авторизация в контроллерах…………………………………………………………………………………… 389

15.6.2.1. Авторизация в контроллерах-функциях: непосредственные проверки……… 389

15.6.2.2. Авторизация в контроллерах-функциях: применение декораторов…………… 390

15.6.2.3. Авторизация в контроллерах-классах………………………………………………………….. 392

15.6.3. Авторизация в шаблонах…………………………………………………………………………………………. 394

15.7. Асинхронные инструменты для разграничения доступа……………………………………………. 395

Часть III. Расширенные инструменты
и дополнительные библиотеки…………………………………………….. 397

Глава 16. Модели: расширенные инструменты…………………………………….. 398

16.1. Управление выборкой полей…………………………………………………………………………………………. 398

16.2. Связи «многие-со-многими» с дополнительными данными………………………………………… 402

16.3. Полиморфные связи………………………………………………………………………………………………………… 405

16.4. Наследование моделей…………………………………………………………………………………………………… 411

16.4.1. Прямое наследование моделей………………………………………………………………………………… 411

16.4.2. Абстрактные модели………………………………………………………………………………………………… 414

16.4.3. Прокси-модели………………………………………………………………………………………………………….. 416

16.5. Создание своих диспетчеров записей…………………………………………………………………………… 416

16.5.1. Создание диспетчеров записей……………………………………………………………………………….. 416

16.5.2. Создание диспетчеров обратной связи…………………………………………………………………… 418

16.6. Создание своих наборов записей………………………………………………………………………………….. 419

16.7. Управление транзакциями……………………………………………………………………………………………… 422

16.7.1. Автоматическое управление транзакциями…………………………………………………………… 422

16.7.1.1. Режим по умолчанию: каждая операция — в отдельной транзакции………… 422

16.7.1.2. Режим атомарных запросов…………………………………………………………………………… 423

16.7.1.3. Режим по умолчанию на уровне контроллера……………………………………………… 423

16.7.1.4. Режим атомарных запросов на уровне контроллера…………………………………… 424

16.7.2. Ручное управление транзакциями…………………………………………………………………………… 426

16.7.3. Обработка подтверждений транзакций………………………………………………………………….. 427

16.8. Отправка SQL-запросов, написанных вручную…………………………………………………………… 428

16.8.1. Отправка SQL-запросов на выборку записей из заданной модели………………………. 428

16.8.2. Отправка произвольных SQL-запросов………………………………………………………………….. 429

Глава 17. Формы и наборы форм: расширенные инструменты и дополнительная библиотека  432

17.1. Формы, не связанные с моделями………………………………………………………………………………….. 432

17.2. Наборы форм, не связанные с моделями………………………………………………………………………. 433

17.3. Расширенные средства для вывода форм и наборов форм…………………………………………. 435

17.3.1. Указание CSS-стилей у форм…………………………………………………………………………………… 435

17.3.2. Настройка выводимых форм……………………………………………………………………………………. 435

17.3.3. Настройка наборов форм…………………………………………………………………………………………. 436

17.3.4. Шаблоны форм, наборов форм и элементов управления……………………………………… 438

17.3.4.1. Шаблоны форм………………………………………………………………………………………………… 438

17.3.4.2. Шаблоны наборов форм…………………………………………………………………………………. 440

17.3.4.3. Шаблон поля формы……………………………………………………………………………………….. 441

17.3.4.4. Шаблоны элементов управления…………………………………………………………………… 441

17.4. Библиотека Django Simple Captcha: поддержка CAPTCHA……………………………………….. 443

17.4.1. Установка Django Simple Captcha…………………………………………………………………………… 443

17.4.2. Использование Django Simple Captcha…………………………………………………………………… 444

17.4.3. Настройка Django Simple Captcha………………………………………………………………………….. 445

17.4.4. Дополнительная команда captcha_clean……………………………………………………………….. 447

17.5. Дополнительные настройки проекта, имеющие отношение к формам……………………… 447

Глава 18. Поддержка баз данных PostgreSQL и библиотека
django-localflavor………………………………………………………………………………….. 448

18.1. Дополнительные инструменты для работы с PostgreSQL…………………………………………… 448

18.1.1. Объявление моделей для работы с PostgreSQL………………………………………………………. 448

18.1.1.1. Поля, специфичные для PostgreSQL……………………………………………………………….. 448

18.1.1.2. Индексы PostgreSQL………………………………………………………………………………………… 451

18.1.1.3. Операционные выражения……………………………………………………………………………… 453

18.1.1.4. Условие ExclusionConstraint………………………………………………………………………….. 453

18.1.1.5. Расширения PostgreSQL………………………………………………………………………………….. 455

18.1.1.6. Валидаторы PostgreSQL…………………………………………………………………………………. 457

18.1.2. Запись и выборка данных в PostgreSQL………………………………………………………………….. 459

18.1.2.1. Запись и выборка значений полей в PostgreSQL…………………………………………… 459

18.1.2.2. Фильтрация записей в PostgreSQL…………………………………………………………………. 461

18.1.3. Агрегатные функции PostgreSQL……………………………………………………………………………… 467

18.1.4. Функции СУБД, специфичные для PostgreSQL……………………………………………………….. 470

18.1.5. Вложенные запросы PostgreSQL……………………………………………………………………………… 470

18.1.6. Полнотекстовая фильтрация PostgreSQL………………………………………………………………… 471

18.1.6.1. Модификатор search……………………………………………………………………………………….. 472

18.1.6.2. Функции СУБД для полнотекстовой фильтрации………………………………………… 472

18.1.6.3. Функции СУБД для фильтрации по похожим словам………………………………….. 477

18.1.7. Создание форм для работы с PostgreSQL……………………………………………………………….. 479

18.1.7.1. Поля форм, специфичные для PostgreSQL……………………………………………………… 479

18.1.7.2. Элементы управления, специфичные для PostgreSQL………………………………….. 481

18.2. Библиотека django-localflavor: дополнительные поля для моделей и форм……………… 481

18.2.1. Установка django-localflavor……………………………………………………………………………………. 482

18.2.2. Поля модели, предоставляемые django-localflavor………………………………………………… 482

18.2.3. Поля формы, предоставляемые django-localflavor…………………………………………………. 483

18.2.4. Элементы управления, предоставляемые django-localflavor………………………………… 483

Глава 19. Шаблоны: расширенные инструменты
и дополнительные библиотеки…………………………………………………………….. 484

19.1. Библиотека django-precise-bbcode: поддержка BBCode……………………………………………… 484

19.1.1. Установка django-precise-bbcode…………………………………………………………………………….. 484

19.1.2. Поддерживаемые BBCode-теги……………………………………………………………………………….. 485

19.1.3. Обработка BBCode…………………………………………………………………………………………………… 486

19.1.3.1. Обработка BBCode при выводе…………………………………………………………………….. 486

19.1.3.2. Хранение BBCode в модели…………………………………………………………………………… 487

19.1.4. Создание дополнительных BBCode-тегов……………………………………………………………… 488

19.1.5. Создание графических смайликов…………………………………………………………………………… 490

19.1.6. Настройка django-precise-bbcode…………………………………………………………………………….. 490

19.2. Библиотека django-bootstrap5: интеграция с Bootstrap 5……………………………………………. 491

19.2.1. Установка django-bootstrap5……………………………………………………………………………………. 492

19.2.2. Использование django-bootstrap5……………………………………………………………………………. 492

19.2.3. Настройка django-bootstrap5…………………………………………………………………………………… 497

19.3. Написание своих фильтров и тегов……………………………………………………………………………….. 498

19.3.1. Организация исходного кода…………………………………………………………………………………… 499

19.3.2. Написание фильтров………………………………………………………………………………………………… 499

19.3.2.1. Написание и использование простейших фильтров……………………………………. 499

19.3.2.2. Управление заменой недопустимых символов HTML………………………………… 501

19.3.3. Написание тегов……………………………………………………………………………………………………….. 502

19.3.3.1. Написание тегов, выводящих элементарные значения……………………………….. 502

19.3.3.2. Написание шаблонных тегов…………………………………………………………………………. 504

19.3.4. Регистрация фильтров и тегов………………………………………………………………………………….. 505

19.4. Переопределение шаблонов………………………………………………………………………………………….. 506

Глава 20. Обработка выгруженных файлов…………………………………………. 509

20.1. Подготовка подсистемы обработки выгруженных файлов………………………………………… 509

20.1.1. Настройка подсистемы обработки выгруженных файлов……………………………………. 509

20.1.2. Указание маршрута для выгруженных файлов……………………………………………………… 511

20.2. Хранение файлов в моделях…………………………………………………………………………………………… 512

20.2.1. Типы полей модели, предназначенные для хранения файлов……………………………… 512

20.2.2. Поля форм, валидаторы и элементы управления, служащие для указания файлов 514

20.2.3. Обработка выгруженных файлов……………………………………………………………………………. 516

20.2.4. Вывод выгруженных файлов……………………………………………………………………………………. 518

20.2.5. Удаление выгруженного файла……………………………………………………………………………….. 519

20.3. Хранение путей к файлам в моделях…………………………………………………………………………….. 520

20.4. Низкоуровневые средства для сохранения выгруженных файлов…………………………….. 520

20.4.1. Класс UploadedFile: выгруженный файл. Сохранение выгруженных файлов……. 521

20.4.2. Вывод выгруженных файлов низкоуровневыми средствами………………………………… 522

20.5. Библиотека django-cleanup: автоматическое удаление ненужных файлов………………. 523

20.6. Библиотека easy-thumbnails: вывод миниатюр……………………………………………………………. 525

20.6.1. Установка easy-thumbnails………………………………………………………………………………………. 525

20.6.2. Настройка easy-thumbnails………………………………………………………………………………………. 526

20.6.2.1. Пресеты миниатюр………………………………………………………………………………………….. 526

20.6.2.2. Остальные настройки библиотеки………………………………………………………………… 528

20.6.3. Вывод миниатюр в шаблонах………………………………………………………………………………….. 530

20.6.4. Хранение миниатюр в моделях……………………………………………………………………………….. 531

20.6.5. Дополнительная команда thumbnail_cleanup………………………………………………………… 532

Глава 21. Разграничение доступа: расширенные инструменты……………. 534

21.1. Настройки проекта, касающиеся разграничения доступа…………………………………………. 534

21.2. Работа с пользователями……………………………………………………………………………………………….. 535

21.2.1. Создание пользователей………………………………………………………………………………………….. 535

21.2.2. Работа с паролями……………………………………………………………………………………………………. 535

21.3. Вход и выход…………………………………………………………………………………………………………………… 536

21.4. Валидация паролей………………………………………………………………………………………………………… 537

21.4.1. Стандартные валидаторы паролей………………………………………………………………………… 538

21.4.2. Написание своих валидаторов паролей…………………………………………………………………. 539

21.4.3. Выполнение валидации паролей…………………………………………………………………………….. 540

21.5. Обращение к модели пользователя……………………………………………………………………………….. 541

21.6. Создание своей модели пользователя…………………………………………………………………………… 542

21.7. Создание своих прав пользователя………………………………………………………………………………. 543

21.8. Асинхронные расширенные инструменты для разграничения доступа……………………. 544

Глава 22. Посредники и обработчики контекста………………………………….. 545

22.1. Посредники……………………………………………………………………………………………………………………… 545

22.1.1. Стандартные посредники………………………………………………………………………………………… 545

22.1.2. Порядок выполнения посредников………………………………………………………………………….. 547

22.1.3. Написание своих посредников………………………………………………………………………………… 547

22.1.3.1. Посредники-функции………………………………………………………………………………………. 548

22.1.3.2. Посредники-классы…………………………………………………………………………………………. 549

22.1.3.3. Асинхронные и универсальные посредники………………………………………………… 551

22.2. Обработчики контекста………………………………………………………………………………………………….. 554

Глава 23. Cookie, сессии, всплывающие сообщения
и подписывание данных………………………………………………………………………. 555

23.1. Cookie………………………………………………………………………………………………………………………………. 555

23.2. Сессии………………………………………………………………………………………………………………………………. 558

23.2.1. Настройка сессий……………………………………………………………………………………………………… 558

23.2.2. Использование сессий………………………………………………………………………………………………. 560

23.2.3. Сохранение сессий……………………………………………………………………………………………………. 562

23.2.4. Дополнительная команда clearsessions………………………………………………………………….. 562

23.2.5. Асинхронные инструменты для работы с сессиями………………………………………………. 563

23.3. Всплывающие сообщения……………………………………………………………………………………………… 563

23.3.1. Настройка всплывающих сообщений…………………………………………………………………….. 563

23.3.2. Уровни всплывающих сообщений…………………………………………………………………………… 564

23.3.3. Создание всплывающих сообщений……………………………………………………………………….. 564

23.3.4. Вывод всплывающих сообщений……………………………………………………………………………. 566

23.3.4.1. Задание минимального уровня выводимых всплывающих сообщений…….. 567

23.3.5. Объявление своих уровней всплывающих сообщений………………………………………….. 568

23.4. Подписывание данных…………………………………………………………………………………………………… 568

Глава 24. Сигналы……………………………………………………………………………….. 572

24.1. Обработка сигналов……………………………………………………………………………………………………….. 572

24.1.1. Объявление обработчиков сигналов……………………………………………………………………….. 572

24.1.2. Привязка обработчиков к сигналам: первый способ…………………………………………….. 573

24.1.3. Привязка обработчиков к сигналам: второй способ……………………………………………… 575

24.1.4. Отмена привязки обработчиков к сигналам…………………………………………………………… 575

24.2. Встроенные сигналы Django………………………………………………………………………………………….. 576

24.3. Объявление и отправка своих сигналов……………………………………………………………………….. 580

24.3.1. Асинхронные инструменты для отправки сигналов……………………………………………… 582

Глава 25. Поддержка нескольких веб-сайтов, простые веб-страницы и статичные перенаправления…………………………………………………………………………………………………………….. 583

25.1. Поддержка нескольких веб-сайтов……………………………………………………………………………….. 583

25.1.1. Подготовка подсистемы поддержки нескольких веб-сайтов к работе…………………. 583

25.1.2. Регистрация веб-сайтов в проекте…………………………………………………………………………… 584

25.1.3. Модель веб-сайта……………………………………………………………………………………………………… 584

25.1.4. Получение веб-сайта, к которому был выполнен запрос……………………………………… 585

25.1.5. Специфические случаи использования подсистемы поддержки
нескольких веб-сайтов………………………………………………………………………………………………………….. 586

25.2. Простые веб-страницы…………………………………………………………………………………………………… 587

25.2.1. Подготовка подсистемы простых веб-страниц………………………………………………………. 587

25.2.2. Создание простых веб-страниц……………………………………………………………………………….. 588

25.2.3. Вывод простых веб-страниц……………………………………………………………………………………. 588

25.2.3.1. Прямой вывод простых веб-страниц……………………………………………………………… 588

25.2.3.2. Использование встроенного списка маршрутов………………………………………….. 589

25.2.3.3. Написание отдельных маршрутов для конкретных простых веб-страниц.. 589

25.2.4. Шаблоны простых веб-страниц………………………………………………………………………………. 590

25.2.5. Вывод гиперссылок на простые веб-страницы………………………………………………………. 591

25.3. Статичные перенаправления…………………………………………………………………………………………. 592

25.3.1. Подготовка подсистемы статичных перенаправлений…………………………………………. 592

25.3.2. Создание статичных перенаправлений………………………………………………………………….. 592

25.3.3. Выполнение статичных перенаправлений…………………………………………………………….. 593

Глава 26. Отправка электронных писем………………………………………………. 594

26.1. Настройка подсистемы отправки электронных писем……………………………………………….. 594

26.2. Низкоуровневые инструменты для отправки писем……………………………………………………. 596

26.2.1. Класс EmailMessage: обычное электронное письмо……………………………………………… 596

26.2.2. Формирование писем на основе шаблонов…………………………………………………………….. 598

26.2.3. Использование соединений. Массовая рассылка писем……………………………………….. 598

26.2.4. Класс EmailMultiAlternatives: составное письмо…………………………………………………… 599

26.3. Высокоуровневые инструменты для отправки писем…………………………………………………. 600

26.3.1. Отправка писем по произвольным адресам……………………………………………………………. 600

26.3.2. Отправка писем зарегистрированным пользователям………………………………………….. 601

26.3.3. Отправка писем администраторам и редакторам сайта………………………………………. 602

26.4. Отправка тестового электронного письма……………………………………………………………………. 603

26.5. Использование отладочного SMTP-сервера aiosmtpd………………………………………………… 603

Глава 27. Кеширование………………………………………………………………………… 605

27.1. Кеширование на стороне сервера…………………………………………………………………………………. 605

27.1.1. Подготовка подсистемы кеширования на стороне сервера………………………………….. 605

27.1.1.1. Настройка подсистемы кеширования на стороне сервера…………………………. 605

27.1.1.2. Создание таблицы для хранения кеша…………………………………………………………. 610

27.1.2. Высокоуровневые средства кеширования……………………………………………………………… 611

27.1.2.1. Кеширование всего веб-сайта………………………………………………………………………… 611

27.1.2.2. Кеширование на уровне отдельных контроллеров……………………………………… 612

27.1.2.3. Управление кешированием…………………………………………………………………………….. 613

27.1.3. Низкоуровневые средства кеширования………………………………………………………………… 614

27.1.3.1. Кеширование фрагментов веб-страниц…………………………………………………………. 614

27.1.3.2. Кеширование произвольных значений…………………………………………………………. 616

27.1.3.3. Асинхронные инструменты для кеширования произвольных значений……. 619

27.2. Кеширование на стороне клиента…………………………………………………………………………………. 619

27.2.1. Автоматическая обработка заголовков………………………………………………………………….. 619

27.2.2. Управление кешированием в контроллерах…………………………………………………………… 621

27.2.2.1. Условная обработка запросов……………………………………………………………………….. 621

27.2.2.2. Прямое указание параметров кеширования…………………………………………………. 622

27.2.2.3. Запрет кеширования……………………………………………………………………………………….. 623

27.2.3. Управление кешированием в посредниках…………………………………………………………….. 623

Глава 28. Локализация…………………………………………………………………………. 625

28.1. Локализация строк………………………………………………………………………………………………………….. 625

28.1.1. Пометка локализуемых строк………………………………………………………………………………….. 625

28.1.1.1. Пометка локализуемых строк в коде шаблонов…………………………………………… 626

28.1.1.2. Пометка локализуемых строк в Python-коде………………………………………………… 629

28.1.2. Создание языковых модулей……………………………………………………………………………………. 631

28.1.2.1. Генерирование языковых модулей………………………………………………………………… 631

28.1.2.2. Перевод локализуемых строк………………………………………………………………………… 632

28.1.2.3. Компиляция языковых модулей…………………………………………………………………….. 635

28.1.3. Переключение веб-сайта на требуемый язык…………………………………………………………. 636

28.1.3.1. Автоматическое переключение на требуемый язык…………………………………….. 636

28.1.3.2. Вывод сведений о поддерживаемых языках…………………………………………………. 637

28.1.3.3. Создание языковых редакций веб-сайта………………………………………………………. 639

28.1.3.4. Переключение на требуемый язык без создания языковых редакций
веб-сайта…………………………………………………………………………………………………………………………. 640

28.1.4. Дополнительные инструменты для локализации строк………………………………………… 642

28.1.5. Настройка локализации строк………………………………………………………………………………… 643

28.2. Локализация форматов…………………………………………………………………………………………………… 645

28.3. Локализация временнх зон………………………………………………………………………………………….. 646

28.3.1. Реализация переключения веб-сайта на требуемую временнýю зону…………………. 646

28.3.2. Вывод значений времени и временнх отметок в разных временнх зонах………. 649

Глава 29. Административный веб-сайт Django…………………………………….. 651

29.1. Подготовка административного веб-сайта к работе…………………………………………………… 651

29.2. Регистрация моделей на административном веб-сайте………………………………………………. 652

29.3. Редакторы моделей…………………………………………………………………………………………………………. 653

29.3.1. Параметры списка записей………………………………………………………………………………………. 653

29.3.1.1. Параметры списка записей: состав выводимого списка……………………………… 653

29.3.1.2. Параметры списка записей: фильтрация и сортировка………………………………. 658

29.3.1.3. Параметры списка записей: прочие………………………………………………………………. 663

29.3.2. Параметры страниц добавления и правки записей……………………………………………….. 665

29.3.2.1. Параметры страниц добавления и правки записей: набор выводимых полей 665

29.3.2.2. Параметры страниц добавления и правки записей:
элементы управления…………………………………………………………………………………………………….. 668

29.3.2.3. Параметры страниц добавления и правки записей: прочие……………………….. 671

29.3.3. Регистрация редакторов на административном веб-сайте…………………………………… 672

29.4. Встроенные редакторы………………………………………………………………………………………………….. 673

29.4.1. Объявление встроенного редактора……………………………………………………………………….. 673

29.4.2. Параметры встроенного редактора………………………………………………………………………… 674

29.4.3. Регистрация встроенного редактора………………………………………………………………………. 676

29.5. Действия…………………………………………………………………………………………………………………………… 676

Глава 30. Разработка веб-служб REST. Библиотека Django REST framework…….. 679

30.1. Установка и подготовка к работе Django REST framework………………………………………… 680

30.2. Введение в Django REST framework. Вывод данных…………………………………………………… 682

30.2.1. Сериализаторы…………………………………………………………………………………………………………. 682

30.2.2. Веб-представление JSON………………………………………………………………………………………….. 683

30.2.3. Вывод данных на стороне клиента…………………………………………………………………………. 685

30.2.4. Первый принцип REST: идентификация ресурса по интернет-адресу………………… 686

30.3. Ввод и правка данных……………………………………………………………………………………………………. 688

30.3.1. Второй принцип REST: идентификация действия по HTTP-методу…………………….. 688

30.3.2. Парсеры веб-форм…………………………………………………………………………………………………….. 692

30.4. Контроллеры-классы Django REST framework……………………………………………………………. 693

30.4.1. Контроллер-класс низкого уровня………………………………………………………………………….. 693

30.4.2. Контроллеры-классы высокого уровня: комбинированные и простые……………….. 694

30.5. Метаконтроллеры…………………………………………………………………………………………………………… 696

30.6. Разграничение доступа в Django REST framework……………………………………………………… 697

30.6.1. Третий принцип REST: данные клиента хранятся на стороне клиента.
Основная аутентификация…………………………………………………………………………………………………… 697

30.6.2. Классы разграничения доступа………………………………………………………………………………. 698

30.6.3. Жетонная аутентификация. Библиотека Simple JWT…………………………………………….. 699

30.6.3.1. Подготовка Simple JWT к работе…………………………………………………………………… 700

30.6.3.2. Контроллеры Simple JWT и написание маршрутов…………………………………….. 701

30.6.3.3. Использование Simple JWT на стороне клиента…………………………………………… 703

30.6.3.4. Настройка Simple JWT……………………………………………………………………………………. 705

Глава 31. Средства журналирования и отладки……………………………………. 707

31.1. Средства журналирования Django……………………………………………………………………………….. 707

31.1.1. Настройка подсистемы журналирования………………………………………………………………. 707

31.1.2. Объект сообщения…………………………………………………………………………………………………….. 708

31.1.3. Форматировщики………………………………………………………………………………………………………. 709

31.1.4. Фильтры…………………………………………………………………………………………………………………….. 710

31.1.5. Обработчики……………………………………………………………………………………………………………… 712

31.1.6. Регистраторы…………………………………………………………………………………………………………….. 717

31.1.7. Пример настройки подсистемы журналирования…………………………………………………. 719

31.1.8. Предотвращение попадания персональных данных в отчеты об ошибках………… 721

31.2. Панель Django Debug Toolbar………………………………………………………………………………………… 722

31.2.1. Подготовка Django Debug Toolbar к работе……………………………………………………………. 722

31.2.2. Работа с Django Debug Toolbar………………………………………………………………………………… 723

31.3. Отправка электронных писем с сообщениями об отсутствующих веб-страницах…… 726

Глава 32. Публикация веб-сайта………………………………………………………….. 727

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

32.1.1. Написание шаблонов веб-страниц с сообщениями об ошибках………………………….. 727

32.1.2. Удаление ненужных данных……………………………………………………………………………………. 728

32.1.3. Настройка эксплуатационного режима…………………………………………………………………. 729

32.1.4. Настройка параметров безопасности…………………………………………………………………….. 730

32.1.5. Настройка веб-сайта для работы по протоколу HTTPS……………………………………….. 733

32.1.6. Настройка веб-сайта для работы через обратный прокси-сервер………………………. 735

32.1.7. Окончательная проверка веб-сайта………………………………………………………………………… 736

32.2. Публикация веб-сайта……………………………………………………………………………………………………. 737

32.2.1. Публикация посредством Uvicorn……………………………………………………………………………. 737

32.2.1.1. Подготовка веб-сайта к публикации посредством Uvicorn…………………………. 738

32.2.1.2. Запуск и остановка Uvicorn……………………………………………………………………………. 739

32.2.2. Публикация посредством Apache HTTP Server………………………………………………………. 739

32.2.2.1. Подготовка веб-сайта к публикации посредством Apache HTTP Server……. 740

32.2.2.2. Подготовка платформы для публикации посредством
Apache HTTP Server……………………………………………………………………………………………………….. 741

32.2.2.3. Конфигурирование веб-сайта для работы под Apache HTTP Server………….. 742

32.2.3. Другие варианты публикации…………………………………………………………………………………. 744

Часть IV. Практическое занятие: разработка веб-сайта.. 745

Глава 33. Дизайн. Вспомогательные веб-страницы………………………………. 746

33.1. План веб-сайта………………………………………………………………………………………………………………… 746

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

33.2.1. Создание и настройка проекта………………………………………………………………………………… 747

33.2.2. Создание и настройка приложения main………………………………………………………………… 748

33.3. Базовый шаблон……………………………………………………………………………………………………………… 748

33.4. Главная веб-страница…………………………………………………………………………………………………….. 755

33.5. Вспомогательные веб-страницы……………………………………………………………………………………. 757

Глава 34. Работа с посетителями и разграничение доступа………………….. 760

34.1. Модель пользователя……………………………………………………………………………………………………… 760

34.2. Основные веб-страницы: входа, профиля и выхода……………………………………………………. 761

34.2.1. Веб-страница входа………………………………………………………………………………………………….. 761

34.2.2. Веб-страница пользовательского профиля…………………………………………………………….. 764

34.2.3. Реализация выхода…………………………………………………………………………………………………… 765

34.3. Веб-страницы правки личных данных посетителя……………………………………………………… 766

34.3.1. Веб-страница правки основных сведений………………………………………………………………. 766

34.3.2. Веб-страница правки пароля…………………………………………………………………………………… 768

34.4. Веб-страницы регистрации и активации посетителей………………………………………………… 770

34.4.1. Веб-страницы регистрации нового посетителя……………………………………………………… 770

34.4.1.1. Форма для занесения сведений о новом посетителе……………………………………. 770

34.4.1.2. Средства для регистрации посетителя………………………………………………………….. 772

34.4.1.3. Средства для отправки писем с требованиями активации………………………….. 774

34.4.2. Веб-страницы активации посетителя……………………………………………………………………… 775

34.5. Веб-страница удаления посетителя……………………………………………………………………………… 778

34.6. Инструменты для администрирования посетителей…………………………………………………… 779

Глава 35. Рубрики………………………………………………………………………………… 782

35.1. Модели рубрик……………………………………………………………………………………………………………….. 782

35.1.1. Базовая модель рубрик…………………………………………………………………………………………….. 782

35.1.2. Модель надрубрик……………………………………………………………………………………………………. 783

35.1.3. Модель подрубрик……………………………………………………………………………………………………. 784

35.2. Инструменты для администрирования рубрик……………………………………………………………. 785

35.3. Вывод списка рубрик в вертикальной панели навигации…………………………………………… 786

Глава 36. Объявления………………………………………………………………………….. 789

36.1. Подготовка к обработке выгруженных файлов……………………………………………………………. 789

36.2. Модели объявлений и дополнительных иллюстраций……………………………………………….. 790

36.2.1. Модель самих объявлений……………………………………………………………………………………….. 790

36.2.2. Модель дополнительных иллюстраций…………………………………………………………………. 793

36.2.3. Реализация удаления объявлений в модели пользователя……………………………………. 793

36.3. Инструменты для администрирования объявлений…………………………………………………….. 794

36.4. Вывод объявлений………………………………………………………………………………………………………….. 794

36.4.1. Вывод списка объявлений………………………………………………………………………………………… 795

36.4.1.1. Форма поиска и контроллер списка объявлений…………………………………………. 795

36.4.1.2. Реализация корректного возврата…………………………………………………………………. 796

36.4.1.3. Шаблон веб-страницы списка объявлений…………………………………………………… 798

36.4.2. Веб-страница сведений о выбранном объявлении………………………………………………… 801

36.4.3. Вывод последних 10 объявлений на главной веб-странице…………………………………. 805

36.5. Работа с объявлениями…………………………………………………………………………………………………… 805

36.5.1. Вывод объявлений, оставленных текущим посетителем………………………………………. 805

36.5.2. Добавление, правка и удаление объявлений………………………………………………………….. 806

Глава 37. Комментарии………………………………………………………………………… 811

37.1. Подготовка к выводу CAPTCHA……………………………………………………………………………………. 811

37.2. Модель комментариев……………………………………………………………………………………………………. 812

37.3. Вывод и добавление комментариев………………………………………………………………………………. 813

37.4. Отправка уведомлений о новых комментариях…………………………………………………………… 816

Глава 38. Бэкенд REST…………………………………………………………………………. 818

38.1. Бэкенд………………………………………………………………………………………………………………………………. 818

38.1.1. Подготовка к разработке бэкенда…………………………………………………………………………… 818

38.1.2. Список объявлений…………………………………………………………………………………………………… 819

38.1.3. Сведения о выбранном объявлении………………………………………………………………………… 820

38.1.4. Вывод и добавление комментариев………………………………………………………………………… 821

38.2. Тестовый фронтенд…………………………………………………………………………………………………………. 823

38.2.1. Введение в Angular……………………………………………………………………………………………………. 823

38.2.2. Подготовка к разработке фронтенда………………………………………………………………………. 824

38.2.3. Ключевые файлы и модули Angular-проекта…………………………………………………………. 825

38.2.3.1. Стартовая веб-страница…………………………………………………………………………………. 825

38.2.3.2. Стартовый модуль………………………………………………………………………………………….. 826

38.2.3.3. Конфигурационный модуль…………………………………………………………………………… 826

38.2.4. Модуль списка маршрутов………………………………………………………………………………………. 828

38.2.5. Компонент приложения AppComponent………………………………………………………………….. 828

38.2.6. Компонент списка объявлений BbListComponent………………………………………………….. 830

38.2.7. Компонент сведений об объявлении BbDetailComponent……………………………………… 835

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

Приложение. Описание файлового архива, сопровождающего книгу….. 844

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

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

Новинка: “Проектирование информационных систем. Профессиональный подход”

Проектирование информационных систем. Профессиональный подход

Рассмотрены подходы и технологии, применяющиеся для проектирования информационных систем и подбора инструментов с учетом развития и поддержки программных продуктов. Разобрана теория развертывания, тестирования, автоматизации, балансировки нагрузки и поддержка новых возможностей в развивающемся продукте. Материал теоретической части рассмотрен на основе гипотетической информационной системы для сказочных персонажей. В практической части описанные теоретические концепции применяются в рамках реализации технического задания и в условиях ограниченности ресурсов. Среди рассмотренных примеров – разработка телеграм-бота, интернет-магазина и плагина к редактору для  3D-моделирования.

Для программистов,  бизнес-аналитиков, архитекторов IT-решений

Правильные вопросы – ключ к правильным ответам

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

Книга состоит из двух частей: теоретической и практической.

  • Материал теоретической части рассмотрен на основе гипотетической информационный системы для сказочных персонажей.
  • В практической части описанные теоретические концепции применяются в рамках реализации технического задания и в условиях ограниченности ресурсов. Среди рассмотренных примеров — разработка телеграм-бота, интернет-магазина, редактора изображений и инструмента для 3D-моделирования.
  • Архитектурные принципы и шаблоны
  • Проектирование программных систем
  • Тестирование
  • Развёртывание
  • Автоматизация процессов
  • Балансировка нагрузки
  • Анализ изменяющихся требований

 

Нет фото

Туров Владимир – инженер-программист, более пяти лет занимающийся коммерческой бэкенд-разработкой, закончил Санкт-Петербургский государственный университет информационных технологий по программной инженерии, автор более 80 технических статей на Хабре, выходивших преимущественно в корпоративном блоге компании Selectel https://habr.com/ru/users/Firemoon/. Автор телеграм-канала https://t.me/not_only_msk о тонкостях программирования.

Книгу “Проектирование информационных систем. Профессиональный подход” можно купить в нашем интенет-магазине.

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

Часть I. Теория проектирования……………………………………………… 11

Глава 1. Методологии разработки ПО……………………………………………………. 13

Водопадная модель…………………………………………………………………………………………………………………… 13

Спиральная модель……………………………………………………………………………………………………………………. 15

Rational Unified Process……………………………………………………………………………………………………………… 16

Язык моделирования UML………………………………………………………………………………………………………… 18

Сущности UML…………………………………………………………………………………………………………………… 18

Структурные сущности UML…………………………………………………………………………………… 18

Поведенческие и дополнительные сущности UML……………………………………………….. 19

Комментирующие сущности UML………………………………………………………………………….. 19

Отношения UML…………………………………………………………………………………………………………………. 19

Диаграммы UML………………………………………………………………………………………………………………… 20

Диаграмма классов…………………………………………………………………………………………………… 20

Диаграмма состояний………………………………………………………………………………………………. 21

Диаграмма развертывания………………………………………………………………………………………. 21

Диаграмма прецедентов…………………………………………………………………………………………… 22

Диаграмма последовательности……………………………………………………………………………… 22

Гибкие методологии………………………………………………………………………………………………………………….. 23

Scrum…………………………………………………………………………………………………………………………………… 24

Feature-Driven Development……………………………………………………………………………………………….. 26

Глава 2. Выяснение требований…………………………………………………………….. 29

Функциональные требования…………………………………………………………………………………………………… 30

Нефункциональные требования……………………………………………………………………………………………….. 31

Глава 3. Архитектурные шаблоны и стили…………………………………………….. 33

Монолитная архитектура…………………………………………………………………………………………………………. 33

Микросервисная архитектура………………………………………………………………………………………………….. 34

Микроядерная архитектура……………………………………………………………………………………………………… 35

Событийно-ориентированная архитектура……………………………………………………………………………. 36

Многоуровневая архитектура………………………………………………………………………………………………….. 37

Representational State Transfer (REST)……………………………………………………………………………………… 38

Распределенная транзакция……………………………………………………………………………………………………… 39

Протокол двухфазного согласования (2 Phase Commit, 2PC)………………………………………… 40

Протокол трехфазного согласования (3 Phase Commit, 3PC)………………………………………… 41

Оркестрация……………………………………………………………………………………………………………………….. 41

Хореография……………………………………………………………………………………………………………………….. 42

Паттерн SAGA…………………………………………………………………………………………………………………….. 42

Глава 4. Принципы разработки ПО……………………………………………………….. 45

Принцип KISS…………………………………………………………………………………………………………………………….. 45

Принцип YAGNI…………………………………………………………………………………………………………………………. 47

Принцип SOLID………………………………………………………………………………………………………………………….. 47

S — Single Response Principle (принцип единой ответственности)………………………………….. 47

O — Open-Closed Principle (принцип открытости/закрытости)………………………………………. 48

L — Liskov substitution principle (принцип подстановки Барбары Лисков)…………………… 49

I — interface segregation principle (принцип разделения интерфейса)……………………………. 51

D — dependency inversion principle (принцип инверсии зависимостей)…………………………. 52

Инверсия управления………………………………………………………………………………………………………………… 53

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

Глава 5. Технологии………………………………………………………………………………. 57

Системы управления базами данных………………………………………………………………………………………. 57

Реляционная модель данных…………………………………………………………………………………………….. 58

Столбцово-ориентированная модель………………………………………………………………………………. 60

Документо-ориентированная модель………………………………………………………………………………. 60

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

Ключ-значение…………………………………………………………………………………………………………………… 61

Базы данных для временнх рядов………………………………………………………………………………….. 62

Брокер сообщений……………………………………………………………………………………………………………………… 62

Параллельные вычисления……………………………………………………………………………………………………….. 64

Закон Амдала……………………………………………………………………………………………………………………… 64

Многопоточность………………………………………………………………………………………………………………. 65

Синхронизация в многопоточных программах……………………………………………………… 65

Псевдопараллелизм…………………………………………………………………………………………………………… 66

Сопрограммы (корутины)………………………………………………………………………………………………….. 67

Многопроцессорные вычисления…………………………………………………………………………………….. 67

Межпроцессное взаимодействие…………………………………………………………………………….. 67

Распределенные вычисления…………………………………………………………………………………………….. 68

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

Вызов функций в распределенных системах………………………………………………………….. 70

GraphQL………………………………………………………………………………………………………………………………………. 70

WebSocket…………………………………………………………………………………………………………………………………… 71

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

Кеширование при чтении (сквозное чтение, read-through)……………………………………………… 73

Кеширование при записи (сквозная запись, write-through)……………………………………………… 73

Чтение на стороне (Read aside)…………………………………………………………………………………………. 73

Запись на стороне (Write aside)…………………………………………………………………………………………. 75

Кеширование на опережение (Cache Ahead, Refresh Ahead)…………………………………………. 75

Политики инвалидации……………………………………………………………………………………………………… 76

Идентификация, аутентификация и авторизация……………………………………………………………………. 77

Идентификация…………………………………………………………………………………………………………………… 77

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

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

Глава 6. Тестирование……………………………………………………………………………. 79

Выбор данных для тестирования…………………………………………………………………………………………….. 81

Юнит-тестирование…………………………………………………………………………………………………………………… 83

Интеграционное тестирование…………………………………………………………………………………………………. 83

Сквозное тестирование (end-to-end)…………………………………………………………………………………………. 84

Полное тестирование………………………………………………………………………………………………………………… 84

Ручное тестирование…………………………………………………………………………………………………………………. 85

Заглушки…………………………………………………………………………………………………………………………………….. 86

Глава 7. Развертывание…………………………………………………………………………. 87

Автоматизация развертывания…………………………………………………………………………………………………. 87

Непрерывная интеграция………………………………………………………………………………………………….. 88

Непрерывная доставка………………………………………………………………………………………………………. 88

Непрерывное развертывание……………………………………………………………………………………………. 89

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

Вертикальное масштабирование……………………………………………………………………………………… 91

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

Выделенные и облачные серверы……………………………………………………………………………………………. 92

Выделенный сервер……………………………………………………………………………………………………………. 93

Облачный сервер……………………………………………………………………………………………………………….. 93

DBaaS (Database as a Service)………………………………………………………………………………….. 94

Объектное хранилище………………………………………………………………………………………………. 94

Развертывание: контейнеризация…………………………………………………………………………………………….. 95

Технология chroot………………………………………………………………………………………………………………. 96

Технология Jail……………………………………………………………………………………………………………………. 96

Технология Docker……………………………………………………………………………………………………………… 97

Технология Kubernetes………………………………………………………………………………………………………. 99

Технология Nomad…………………………………………………………………………………………………………… 100

Развертывание: обнаружение сервисов…………………………………………………………………………………. 101

Глава 8. Балансировка нагрузки………………………………………………………….. 103

Алгоритмы балансировки……………………………………………………………………………………………………….. 103

DNS                                                                                                                                                                 105

GeoDNS……………………………………………………………………………………………………………………………………… 106

Обратный прокси-сервер………………………………………………………………………………………………………… 107

Глава 9. Обслуживание………………………………………………………………………… 109

Логирование…………………………………………………………………………………………………………………………….. 109

Мониторинг……………………………………………………………………………………………………………………………… 111

Оповещение………………………………………………………………………………………………………………………………. 111

Анализаторы исходного кода………………………………………………………………………………………………… 112

Сканеры уязвимостей………………………………………………………………………………………………………………. 113

Аудит-логи……………………………………………………………………………………………………………………………….. 113

Аварийные игры………………………………………………………………………………………………………………………. 114

Миграция схемы и миграция данных…………………………………………………………………………………….. 115

Версионирование…………………………………………………………………………………………………………………….. 116

Глава 10. Отказоустойчивость, резервирование и надежность……………… 119

Надежность системы……………………………………………………………………………………………………………….. 119

Отказоустойчивость………………………………………………………………………………………………………………… 120

Резервирование………………………………………………………………………………………………………………………… 120

Резервное копирование……………………………………………………………………………………………………. 121

Схемы резервирования……………………………………………………………………………………………………. 122

Восстановление после катастроф………………………………………………………………………………………….. 122

Часть II. Примеры проектирования систем……………………….. 125

Глава 11. Проектирование неинтеративного редактора изображений….. 127

Исходные требования……………………………………………………………………………………………………………… 127

Монолитный подход……………………………………………………………………………………………………………….. 127

Модульный подход…………………………………………………………………………………………………………………. 130

Внезапное требование…………………………………………………………………………………………………………….. 134

Рекомендуемые технологии……………………………………………………………………………………………………. 138

Распространение……………………………………………………………………………………………………………………… 138

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

Глава 12. Проектирование текстового блога………………………………………… 141

Исходные требования……………………………………………………………………………………………………………… 141

Быстрый минимальный вариант…………………………………………………………………………………………….. 142

Проектирование архитектуры………………………………………………………………………………………………… 145

Рекомендуемые технологии……………………………………………………………………………………………………. 150

Безопасность……………………………………………………………………………………………………………………………. 151

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

Поиск…………………………………………………………………………………………………………………………………………. 152

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

Локализация контента…………………………………………………………………………………………………………….. 153

Логирование и мониторинг…………………………………………………………………………………………………….. 155

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

Рекомендательная система……………………………………………………………………………………………………… 156

Соблюдение локальных норм………………………………………………………………………………………………… 156

Резервное копирование……………………………………………………………………………………………………………. 156

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

Глава 13. Проектирование сервиса конвертации файлов……………………… 159

Исходные требования……………………………………………………………………………………………………………… 159

Проектирование архитектуры………………………………………………………………………………………………… 159

Проектирование веб-сервера………………………………………………………………………………………………….. 163

Проектирование агента…………………………………………………………………………………………………………… 164

Проектирование взаимодействия с инструментами конвертации………………………………………. 165

Проектирование фонового процесса……………………………………………………………………………………… 166

Выбор технологий…………………………………………………………………………………………………………………… 167

Ограничение анонимных пользователей………………………………………………………………………………. 167

Запрет использования сервиса в качестве файлового хранилища……………………………… 167

Ограничение количества действий с одного адреса…………………………………………………….. 168

Запрет регистрации с фальшивых почтовых адресов………………………………………………….. 169

Ограничение по объему и форматам……………………………………………………………………………… 169

Безопасность……………………………………………………………………………………………………………………………. 170

Взаимодействие с платежными системами…………………………………………………………………………… 171

Приватность данных……………………………………………………………………………………………………………….. 171

Пароль доступа………………………………………………………………………………………………………………… 171

Шифрование данных……………………………………………………………………………………………………….. 171

Логирование и мониторинг…………………………………………………………………………………………………….. 173

Распределенная архитектура…………………………………………………………………………………………………. 174

Улучшение пользовательского опыта…………………………………………………………………………………… 175

Подробные статусы…………………………………………………………………………………………………………. 175

Хеширование входных файлов……………………………………………………………………………………….. 176

Определение некорректных файлов……………………………………………………………………………….. 177

Добавление новой функциональности…………………………………………………………………………………… 177

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

Глава 14. Проектирование интернет-магазина в Telegram……………………. 179

Исходные требования……………………………………………………………………………………………………………… 179

Анализ возможностей………………………………………………………………………………………………………. 180

Ограничения……………………………………………………………………………………………………………………… 182

Проектирование интерфейса бота…………………………………………………………………………………………. 183

Проектирование зоны администратора………………………………………………………………………………… 186

Проектирование архитектуры………………………………………………………………………………………………… 188

Выбор технологий…………………………………………………………………………………………………………………… 190

Рассылка уведомлений……………………………………………………………………………………………………………. 190

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

Мониторинг……………………………………………………………………………………………………………………………… 193

Дальнейшие улучшения………………………………………………………………………………………………………….. 193

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

Глава 15. Проектирование плагина для отправки проекта
из программы 3D-моделирования…………………………………………………………. 195

Исходные требования……………………………………………………………………………………………………………… 195

Ограничения…………………………………………………………………………………………………………………………….. 195

Проектирование простой архитектуры…………………………………………………………………………………. 196

Проектирование составной архитектуры……………………………………………………………………………… 198

Выбор технологий…………………………………………………………………………………………………………………… 199

Логирование…………………………………………………………………………………………………………………………….. 199

Потенциальные технические улучшения………………………………………………………………………………. 200

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

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

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

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

Программируем на Java: практический подход к созданию надежных и эффективных приложений

Программируем на Java: практический подход к созданию надежных и эффективных приложений

Книга о современном программировании на Java, охватывающая новые возможности Java 21 и практическое применение языка для создания многофункциональных приложений. Подробно рассматриваются ключевые концепции, структуры данных, работа с реляционными базами данных PostgreSQL и Apache Cassandra®, а также использование фреймворков  Spring Boot и Spring Data. Отдельное внимание уделено разработке графики, анимации и даже небольших аркадных игр на Java. Рассматриваются лучшие практики построения программной архитектуры, создания графических интерфейсов и веб-приложений с помощью Vaadin.
Для программистов

Практическое руководство по программированию на Java 21

Эта книга — практическое руководство по одному из самых распространенных в мире языков программирования Java 21. Она поможет читателям расширить свои знания об общих конструкциях Java, структурах данных и инженерных подходах. Автор рассказывает об  использовании популярных Java-фреймворков, таких как Spring и Vaadin, для создания мощных, многофункциональных приложений. Также описана технология разработки приложений, управляемых СУБД корпоративного уровня, таких как PostgreSQL и Apache Cassandra®. Автор показывает, как использовать Java для анимации и создать простую аркадную игру.

  • Освойте фундаментальные структуры программирования на Java
  • Изучите возможности Java 21
  • Создавайте Java-приложения с использованием СУБД PostgreSQL и Apache Cassandra®
  • Узнайте, как создавать графику и простую анимацию с помощью Java
  • Используйте такие фреймворки, как Spring Boot и Spring Data
  • Разрабатывайте полнофункциональные графические интерфейсы с помощью Vaadin

 

Плоетц Аарон

Плоетц Аарон (Ploetz Aaron) — занимает должность developer advocate в компании DataStax. С 1997 года профессионально занимается разработкой программного обеспечения и имеет успешный опыт руководства командами администраторов баз данных и DevOps как в стартапах, так и в компаниях из списка Fortune 500.

Книгу “Программируем на Java: практический подход к созданию надежных и эффективных приложений” можно купить в нашем интенет-магазине.

Об авторе. 14

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

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

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

Пакет кодов и цветные изображения. 19

Глава 1. Знакомство с Java. 21

Введение. 21

Структура. 21

Цели  21

Почему стоит программировать на Java?. 22

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

Операционная система. 23

Java Runtime Environment 23

Java Development Kit 23

Поставщики и редакции JDK.. 23

Установка. 24

Windows. 24

MacOS. 25

Linux. 25

Управление версиями. 25

Интегрированная среда разработки. 26

Управление зависимостями в Java. 26

Система контроля версий. 26

Установка Git 27

Объектно-ориентированное программирование. 27

Инкапсуляция. 28

Наследование. 29

Абстракция. 30

Полиморфизм.. 32

Статический полиморфизм.. 32

Динамический полиморфизм.. 33

Преимущества ООП.. 34

Что нового в Java 21?. 34

Виртуальные потоки. 34

Упорядоченные коллекции. 35

Строковые шаблоны.. 36

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

Важно помнить. 37

Глава 2. Фундаментальные структуры программирования. 39

Введение. 39

Структура. 39

Цели  40

Начало работы.. 40

Maven. 40

HelloWorld. 40

Анонимные классы main. 42

Переменные и форматирование. 43

Чтение входных данных. 46

Обработка ошибок. 47

Операторы if 49

Операторы switch/case. 50

Циклы.. 52

Циклы for. 52

Циклы while. 53

Циклы do. 54

Файлы.. 55

Запись в файл. 55

Чтение из файла. 58

Чтение данных строки из файла. 59

Методы и конструкторы.. 62

Пример программы MetricUnitConverter. 62

Класс InvalidUOMException. 63

MeasurementValue POJO.. 63

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

Важно помнить. 73

Глава 3. Строки, символы и регулярные выражения. 75

Введение. 75

Структура. 75

Цели  75

Символы.. 75

ASCII-арт. 79

Строки. 81

indexOf 82

substring. 82

toUpperCase. 83

toLowerCase. 83

Сравнение строк. 84

Сравнение строковых суффиксов. 85

Сравнение префиксов строк. 87

contains. 87

Регулярные выражения. 88

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

Важно помнить. 92

Глава 4. Массивы, коллекции и записи. 93

Введение. 93

Структура. 93

Цели  93

Массивы.. 94

Многомерные массивы.. 96

Коллекции и словари. 100

Множества. 101

HashSet 102

LinkedHashSet 103

TreeSet 103

Списки. 103

ArrayList 104

LinkedList 106

Словари. 108

HashMap. 110

LinkedHashMap. 111

TreeMap. 112

Упорядоченные коллекции. 113

Записи. 114

Построение простого примера. 115

Класс RPGSimulation. 116

Класс Player. 118

Класс Hero. 120

Продолжение работы с классом RPGSimulation. 121

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

Важно помнить. 125

Глава 5. Арифметические операции. 127

Введение. 127

Структура. 127

Цели  127

Целочисленная арифметика. 128

Сложение. 128

Тестирование add( ) с помощью JUnit 130

Вычитание. 133

Умножение. 134

Деление. 134

Модуль. 135

Возведение в степень. 136

Арифметика чисел с плавающей точкой. 137

Сложение. 137

Особенности работы с арифметикой чисел с плавающей точкой. 138

Вычитание. 141

Умножение. 142

Деление. 142

Форматирование значений с плавающей точкой. 142

Возведение в степень. 144

Квадратный корень. 145

Кубический корень. 145

Модуль числа. 146

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

Важно помнить. 147

Глава 6. Общие структуры данных. 149

Введение. 149

Структура. 149

Цели  149

Стеки. 150

Очереди. 157

Связные списки. 161

Двоичные деревья. 168

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

Важно помнить. 173

Глава 7. Работа с базами данных. 175

Введение. 175

Структура. 175

Цели  175

Введение в базы данных. 176

Краткая история баз данных. 176

Теорема CAP. 178

Согласованность. 178

Доступность. 178

Устойчивость к разделениям.. 178

Обозначения CAP. 179

PostgreSQL. 180

ElephantSQL. 180

Схема. 182

Нормализация. 185

Загрузка данных. 186

Запрос данных. 187

Доступ из Java. 189

Класс PostgresConn. 189

Класс AstronautPostgresDAL. 191

Класс GeminiAstronautsRDBMS. 193

Пересмотр класса AstronautPostgresDAL. 196

Пересмотр класса GeminiAstronautsRDBMS. 198

Apache Cassandra. 199

Astra DB.. 200

Схема. 203

Денормализация. 206

Загрузка данных. 206

Запрос данных. 207

Доступ из Java. 209

pom.xml 209

Класс CassandraConn. 210

Класс AstronautCassandraDAL. 211

Класс GeminiAstronautsNoSQL. 213

Пересмотр класса AstronautCassandraDAL. 217

Пересмотр класса GeminiAstronautsNoSQL. 217

Выбор подходящей базы данных. 219

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

Важно помнить. 220

Глава 8. Веб-приложения. 221

Введение. 221

Структура. 221

Цели  221

Операции Restful 222

URI Restful 223

Простые операции. 223

Веб-сервисы с помощью Spring Boot 226

MVC.. 230

Контроллер погодного приложения. 230

Конечная точка сервиса Hello World. 231

Модель погодного приложения. 233

Определение нового пространства ключей. 233

Определение новой таблицы.. 234

Генерация нового маркера. 235

Установка свойств приложения и переменных окружения. 236

Изменение pom.xml 237

Класс WeatherPrimaryKey. 237

Класс WeatherEntity. 239

Класс WeatherReading. 240

Интерфейс WeatherAppRepository. 241

Построение JSON-объектов ответа. 242

Класс Measurement 242

Класс CloudLayer. 242

Класс Properties. 243

Класс Geometry. 244

Класс LatestWeather. 244

Пересмотр контроллера погодного приложения. 245

Создание пользовательских веб-интерфейсов. 250

Пересмотр pom.xml 250

Вид погодного приложения. 251

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

Важно помнить. 259

Глава 9. Графика в Java. 261

Введение. 261

Структура. 261

Цели  261

Простая графика с помощью AWT и Swing. 262

Класс SimpleDraw.. 262

Класс MyPanel 262

Анимация. 268

Класс Planet 268

Класс SolarSystem.. 270

Класс DrawPlanets. 273

Java Breakout 275

pom.xml 275

Класс Ball 276

Класс Brick. 278

Класс Paddle. 279

Класс KeyHandler. 280

Класс BreakoutPanel 282

Класс BreakoutGame. 291

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

Важно помнить. 293

Глава 10. Завершающий Java-проект. 295

Введение. 295

Структура. 295

Цели  295

Знакомство с приложением для работы с фильмами. 296

Архитектура. 296

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

Выбор базы данных. 297

Создание новой векторной базы данных. 297

Проектирование таблиц. 298

Загрузчик данных. 300

pom.xml 301

Класс CassandraConnection. 301

Класс AstraConnection. 303

Класс Movie. 304

Класс MovieDataLoader. 305

Запрос данных. 313

Создание проекта киноприложения. 315

Каталог изображений. 316

pom.xml 316

application.yml 317

Модель. 318

Класс Movie. 318

Интерфейс MovieRepository. 319

Класс MovieByTitle. 320

Интерфейс MovieByTitleRepository. 321

Контроллер. 321

Класс MovieAppController. 321

Запрос к сервису. 324

Фильмы по ID.. 324

Фильмы по названию.. 324

Рекомендации фильмов. 325

Представление. 325

Класс MovieAppMainView.. 325

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

Важно помнить. 341

Приложения. 343

Приложение 1. Ссылки. 345

Приложение 2. Таблица преобразования UTF. 347

Приложение 3. Справочник команд баз данных. 356

SELECT. 356

INSERT. 357

UPDATE. 357

DELETE. 357

CREATE TABLE. 358

CREATE INDEX. 358

Приложение 4. Общие коды ответов HTTP. 359

Приложение 5. Основные цветовые коды.. 360

Приложение 6. Сбор мусора. 361

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

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

API как искусство: разработка, поддержка, интеграция

API как искусство: разработка, поддержка, интеграция

В книге подробно рассказано, как написать качественный API и интегрировать его в имеющуюся систему.  Рассмотрено, как готовить спецификации API, работать с запросами, обслуживать мобильные и серверные API для взаимодействия с базами данных и обмена сообщениями, реализовывать нетривиальную бизнес-логику и подбирать подходящую схему API даже для самых сложных и нечетких задач. Описано, как обеспечивать слабую связность между компонентами, организовывать операции CRUD, осуществлять синхронный и асинхронный обмен данными, в частности, выполнять операции push и poll. Рассказано, как реализовать аутентификацию и идентификацию пользователей. Весь материал базируется на парадигме HTTP REST и позволяет развивать ее в соответствии с современными реалиями и меняющимися требованиями.

Для специалистов по проектированию и поддержке API

API в современных приложениях подобны стыковочным узлам и разъемам. Подход «API-first» — одна из самых горячих современных тем в разработке программного обеспечения.
Многие компании постепенно приходят к пониманию, что уровень API (интерфейсов прикладного программирования) может многократно умножить возможности компании, если спроектировать его правильно. Однако некачественные или неудобные в поддержке API могут превратиться в источник хронических проблем, так что лучше сразу делать их правильно и предусматривать поддержку и расширяемость.

Эта книга написана с целью изложения лучших практик разработки API. Книга состоит из шести разделов, посвящённых:

  • проектированию API;
  • паттернам дизайна API;
  • поддержке обратной совместимости;
  • HTTP API и архитектурным принципам REST;
  • SDK и библиотекам для пользовательского интерфейса (UI);
  • управлению API как продуктом.

С книгой вы научитесь:

  • проектировать интерфейсы и писать их спецификации;
  • организовывать синхронный и асинхронный обмен данными
  • реализовывать модели push и poll
  • обеспечивать слабую связность между компонентами
  • выполнять операции CRUD
  • программировать бизнес-логику API
  • гарантировать надёжную идентификацию и аутентификацию пользователей.

 

Константинов Сергей Сергеевич

Константинов Сергей работает с API уже больше десяти лет. Начинал свою карьеру в подразделении по разработке API Яндекс-Карт и со временем стал руководителем всего сервиса, где отвечал за техническую составляющую Яндекс-Карт и за управление продуктом. Обладает уникальным опытом построения крупномасштабных API мирового уровня для сервисов, которыми ежедневно пользуются десятки миллионов человек. В течение полутора лет проработал в составе группы технической архитектуры W3C.

Книгу “API как искусство: разработка, поддержка, интеграция” можно купить в нашем интенет-магазине.

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

О структуре этой книги……………………………………………………………………………………………………………….. 9

Определение API………………………………………………………………………………………………………………………… 10

Критерии качества API……………………………………………………………………………………………………………… 11

Выбор подхода к разработке API…………………………………………………………………………………………….. 13

Подход API-first………………………………………………………………………………………………………………………….. 13

Обратная совместимость…………………………………………………………………………………………………………… 14

О версионировании……………………………………………………………………………………………………………………. 15

Условные обозначения и терминология………………………………………………………………………………….. 15

Часть I. Проектирование API………………………………………………………. 19

Глава 1. Пирамида контекстов API. Определение области применения…. 21

Почему API?……………………………………………………………………………………………………………………………….. 23

Что и как?……………………………………………………………………………………………………………………………………. 23

Глава 2. Разделение уровней абстракции……………………………………………….. 24

Изоляция уровней абстракции………………………………………………………………………………………………….. 34

Потоки данных…………………………………………………………………………………………………………………………… 36

Глава 3. Разграничение областей ответственности…………………………………. 38

Сценарии использования………………………………………………………………………………………………………….. 39

Хелперы………………………………………………………………………………………………………………………………………. 42

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

Декомпозиция интерфейсов. Правило «7±2»…………………………………………………………………………… 44

Глава 4. Описание конечных интерфейсов…………………………………………….. 47

  1. Важное уточнение номер один: правила не должны применяться бездумно………………….. 47
  2. Явное лучше неявного…………………………………………………………………………………………………………… 48
  3. Указывайте использованные стандарты……………………………………………………………………………… 49
  4. Сущности должны именоваться конкретно…………………………………………………………………………. 50
  5. Не экономьте буквы……………………………………………………………………………………………………………….. 50
  6. Тип поля должен быть ясен из его названия………………………………………………………………………… 51
  7. Подобные сущности должны называться подобно и вести себя подобным образом……… 52
  8. Избегайте двойных отрицаний……………………………………………………………………………………………… 53
  9. Избегайте неявного приведения типов…………………………………………………………………………………. 53
  10. Декларируйте технические ограничения явно………………………………………………………………….. 55
  11. Любые запросы должны быть лимитированы………………………………………………………………….. 55
  12. Описывайте политику перезапросов………………………………………………………………………………….. 56
  13. Подсчитывайте трафик……………………………………………………………………………………………………….. 56
  14. Отсутствие результата — тоже результат………………………………………………………………………… 57
  15. Валидируйте ввод………………………………………………………………………………………………………………… 58
  16. Значения по умолчанию должны быть осмысленны……………………………………………………….. 60
  17. Ошибки должны быть информативными…………………………………………………………………………… 61
  18. Всегда показывайте неразрешимые ошибки прежде разрешимых…………………………………. 62
  19. Начинайте исправление ошибок с более глобальных……………………………………………………… 63
  20. Проанализируйте потенциальные взаимные блокировки……………………………………………….. 64
  21. Указывайте время жизни ресурсов и политики кеширования………………………………………….. 65
  22. Сохраняйте точность дробных чисел………………………………………………………………………………… 66
  23. Все операции должны быть идемпотентны………………………………………………………………………. 67
  24. Не изобретайте безопасность…………………………………………………………………………………………….. 69
  25. Помогайте партнерам не изобретать безопасность…………………………………………………………. 70
  26. Используйте глобально уникальные идентификаторы……………………………………………………. 71
  27. Предусмотрите ограничения доступа……………………………………………………………………………….. 72
  28. Не предоставляйте функциональность массового получения
    чувствительных данных………………………………………………………………………………………………………. 72
  29. Локализация и интернационализация……………………………………………………………………………….. 73

Часть II. Паттерны дизайна API…………………………………………………. 75

Глава 5. О паттернах проектирования в контексте API…………………………. 77

Принципы решения типовых проблем проектирования API………………………………………………….. 78

Глава 6. Аутентификация партнеров и авторизация вызовов API………….. 79

Глава 7. Стратегии синхронизации………………………………………………………… 81

Программные блокировки…………………………………………………………………………………………………………. 82

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

Глава 8. Слабая консистентность…………………………………………………………… 84

Событийная консистентность…………………………………………………………………………………………………… 84

Риски перехода к событийной консистентности…………………………………………………………………….. 86

Глава 9. Асинхронность и управление временем……………………………………. 89

Глава 10. Списки и организация доступа к ним…………………………………….. 93

Иммутабельные списки……………………………………………………………………………………………………………… 97

Пополняемые списки, иммутабельные данные……………………………………………………………………….. 97

Общий сценарий………………………………………………………………………………………………………………………. 101

Глава 11. Двунаправленные потоки данных. Push- и poll-модели…………. 103

Доставка сообщений на клиентское устройство………………………………………………………………….. 104

  1. Дуплексные соединения………………………………………………………………………………………………. 104
  2. Раздельный канал обратного вызова и асинхронные потоки событий………………….. 105
  3. Сторонние сервисы отправки push-уведомлений……………………………………………………… 105

Использование push-технологий в публичном API………………………………………………………………. 106

Доставка сообщений backend-to-backend…………………………………………………………………………….. 107

Типичные проблемы интеграции через webhook………………………………………………………………….. 108

Очереди сообщений…………………………………………………………………………………………………………………. 110

Глава 12. Асинхронная обработка событий.
Атомарность массовых изменений……………………………………………………….. 111

Глава 13. Частичные обновления…………………………………………………………. 119

Варианты решения………………………………………………………………………………………………………………….. 120

Разрешение конфликтов совместного редактирования………………………………………………………… 124

Глава 14. Деградация и предсказуемость……………………………………………… 125

Часть III. Обратная совместимость……………………………………… 127

Глава 15. Постановка проблемы обратной совместимости…………………… 129

Фрагментация клиентских приложений………………………………………………………………………………… 130

Эволюция предметной области……………………………………………………………………………………………… 132

Дрифт платформ………………………………………………………………………………………………………………………. 132

Обратная совместимость на уровне спецификаций……………………………………………………………… 133

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

Глава 16. О ватерлинии айсберга…………………………………………………………. 136

  1. Предоставляйте минимальный объем функциональности………………………………………………. 136
  2. Избегайте «серых зон» и недосказанности………………………………………………………………………… 137
  3. Фиксируйте неявные договоренности………………………………………………………………………………… 137
  4. Продуктовая логика тоже должна быть обратно совместимой………………………………………. 140

Глава 17. Расширение через абстрагирование………………………………………. 141

Границы применимости………………………………………………………………………………………………………….. 144

Глава 18. Сильная связность и сопутствующие проблемы…………………… 145

Правило контекстов…………………………………………………………………………………………………………………. 147

Глава 19. Слабая связность………………………………………………………………….. 151

Инверсия ответственности………………………………………………………………………………………………………. 156

Делегируй!………………………………………………………………………………………………………………………… 158

Интерфейсы как универсальный паттерн……………………………………………………………………………… 159

Глава 20. «Блокнот душевного покоя»…………………………………………………. 161

  1. Помните о подводной части айсберга……………………………………………………………………………….. 161
  2. Тестируйте формальные интерфейсы………………………………………………………………………………… 161
  3. Изолируйте зависимости…………………………………………………………………………………………………….. 162
  4. Реализуйте функциональность своего API поверх публичных интерфейсов…………………. 162
  5. Заведите блокнот…………………………………………………………………………………………………………………. 163

Часть IV. HTTP API и архитектурные принципы REST……….. 165

Глава 21. О концепции HTTP API. Парадигмы разработки
клиент-серверного взаимодействия………………………………………………………. 167

Глава 22. Преимущества и недостатки HTTP (REST) API в сравнении с альтернативными технологиями……………………………………………………………………………………….. 171

  1. Машиночитаемость метаданных……………………………………………………………………………………….. 173
  2. Качество решений……………………………………………………………………………………………………………….. 174
  3. Вопросы производительности……………………………………………………………………………………………. 175

Преимущества и недостатки формата JSON…………………………………………………………………………. 176

Выбор технологии разработки клиент-серверного API……………………………………………………….. 177

Технология gRPC……………………………………………………………………………………………………………… 178

Технология GraphQL……………………………………………………………………………………………………….. 178

Мифология REST……………………………………………………………………………………………………………………… 179

Глава 23. Составляющие HTTP-запросов и их семантика……………………. 182

  1. URL……………………………………………………………………………………………………………………………………….. 183
  2. Заголовки……………………………………………………………………………………………………………………………… 185
  3. HTTP-глаголы………………………………………………………………………………………………………………………. 186
  4. Статус-коды…………………………………………………………………………………………………………………………. 188

Важное замечание о кешировании………………………………………………………………………………………… 189

Важное замечание о консистентности…………………………………………………………………………………… 189

Глава 24. Организация HTTP API согласно принципам REST……………… 191

Пример построения HTTP API………………………………………………………………………………………………… 192

Авторизация stateless-запросов………………………………………………………………………………………………. 199

Глава 25. Разработка номенклатуры URL-ресурсов. CRUD-операции….. 200

  1. Где заканчиваются метаданные операции и начинаются «просто» данные
    и насколько допустимо дублировать поля и там и там?………………………………………………….. 201
  2. Каким образом организовывать эндпойнты, связывающие две сущности, междукоторыми нет явных отношений подчинения?………………………………………………………………………………………………………………………….. 202
  3. Насколько строго должна выдерживаться буквальная интерпретация
    конструкции ГЛАГОЛ /ресурс?……………………………………………………………………………………………. 202

CRUD-операции……………………………………………………………………………………………………………………….. 204

  1. Создание……………………………………………………………………………………………………………………….. 205
  2. Чтение……………………………………………………………………………………………………………………………. 206
  3. Редактирование……………………………………………………………………………………………………………. 207
  4. Удаление……………………………………………………………………………………………………………………….. 207

CRUD-операции в реальной жизни………………………………………………………………………………… 207

Глава 26. Работа с ошибками в HTTP API……………………………………………. 209

Клиентские ошибки…………………………………………………………………………………………………………………. 210

Серверные ошибки…………………………………………………………………………………………………………………… 213

Организация системы ошибок в HTTP API на практике………………………………………………………. 215

Глава 27. Заключительные положения и общие рекомендации……………. 215

Часть V. SDK- и UI-библиотеки………………………………………………….. 219

Глава 28. Терминология. Обзор технологий разработки SDK……………….. 221

Выбор фреймворка для разработки UI-компонентов…………………………………………………………… 222

Глава 29. SDK: проблемы и решения……………………………………………………. 223

Кодогенерация…………………………………………………………………………………………………………………………. 228

Другие инструменты……………………………………………………………………………………………………………….. 229

Глава 30. Проблемы встраивания UI-компонентов………………………………. 229

Проблемы…………………………………………………………………………………………………………………………………. 230

  1. Объединение в одном объекте разнородной функциональности…………………………….. 231
  2. Общее владение ресурсами…………………………………………………………………………………………. 231
  3. Множественная иерархия подчинения сущностей…………………………………………………… 232

Глава 31. Декомпозиция UI-компонентов…………………………………………….. 234

Глава 32. MV*-фреймворки………………………………………………………………….. 247

Паттерн «модель»…………………………………………………………………………………………………………………….. 249

Backend-Driven UI……………………………………………………………………………………………………………………. 251

Глава 33. Разделяемые ресурсы и асинхронные блокировки……………….. 254

Глава 34. Вычисляемые свойства…………………………………………………………. 258

Варианты подходов………………………………………………………………………………………………………………… 259

Вычисленные значения…………………………………………………………………………………………………………… 260

Глава 35. Заключение к части V………………………………………………………….. 260

Часть VI. API как продукт…………………………………………………………… 261

Глава 36. Продукт API. Бизнес-модели API………………………………………….. 263

Основные модели монетизации API……………………………………………………………………………………….. 265

  1. Разработчик = конечный пользователь……………………………………………………………………… 265
  2. API = основной и/или единственный способ доступа к сервису……………………………… 266
  3. API = партнерская программа…………………………………………………………………………………….. 266
  4. API = дополнительный доступ к сервису…………………………………………………………………… 267
  5. API = площадка для рекламы……………………………………………………………………………………… 268
  6. API = самореклама и самопиар…………………………………………………………………………………… 268
  7. API = инструмент получения обратной связи и UGC………………………………………………… 269
  8. Терраформирование…………………………………………………………………………………………………….. 269
  9. «Серая зона»…………………………………………………………………………………………………………………. 270

Подход API-first……………………………………………………………………………………………………………………….. 270

Глава 37. Формирование продуктового вдения………………………………….. 271

Продуктовое вдение API……………………………………………………………………………………………………….. 271

Проверка продуктовых гипотез……………………………………………………………………………………………… 272

Глава 38. Взаимодействие с разработчиками и бизнес-аудиторией………. 273

Open Source………………………………………………………………………………………………………………………………. 275

Фрагментация аудитории……………………………………………………………………………………………………….. 276

Взаимодействие с бизнес-аудиторией…………………………………………………………………………………… 277

Глава 39. Линейка сервисов API………………………………………………………….. 278

Горизонтальное разделение сервисов API……………………………………………………………………………. 278

Вертикальное разделение сервисов API………………………………………………………………………………… 279

Глава 40. Ключевые показатели эффективности API……………………………. 281

SLA……………………………………………………………………………………………………………………………………………. 283

Сравнение с конкурентами……………………………………………………………………………………………………… 284

Глава 41. Идентификация пользователей и борьба с фродом……………….. 285

Идентификация приложений и их владельцев………………………………………………………………………. 285

Идентификация конечных пользователей……………………………………………………………………………… 288

Глава 42. Технические способы борьбы с несанкционированным доступом к API          289

  1. Идентификация подозрительных пользователей……………………………………………………………… 289
  2. Запрос дополнительного фактора аутентификации………………………………………………………… 290
  3. Ограничение доступа………………………………………………………………………………………………………….. 290

Противодействие краже ключей…………………………………………………………………………………………….. 292

Глава 43. Поддержка пользователей API……………………………………………… 293

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

Виды справочных материалов……………………………………………………………………………………………….. 296

  1. Спецификация/справочник/референс…………………………………………………………………………. 296
  2. Примеры кода……………………………………………………………………………………………………………….. 297
  3. Песочницы…………………………………………………………………………………………………………………….. 297
  4. Руководство (туториал)……………………………………………………………………………………………….. 298
  5. Часто задаваемые вопросы и база знаний…………………………………………………………………. 299
  6. Офлайн-документация…………………………………………………………………………………………………. 299

Проблемы дублирования контента………………………………………………………………………………………… 299

Качество документации………………………………………………………………………………………………………….. 300

Тестовая среда…………………………………………………………………………………………………………………………. 300

  1. API среды тестирования………………………………………………………………………………………………. 301
  2. Симулятор предопределенных сценариев…………………………………………………………………. 302

Автоматизация тестирования…………………………………………………………………………………………………. 302

Глава 44. Управление ожиданиями………………………………………………………. 303

Версионирование и жизненный цикл приложений……………………………………………………………….. 303

Поддержка платформ………………………………………………………………………………………………………………. 304

Движение вперед……………………………………………………………………………………………………………………… 304

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

Новинка: “C++. 20 уроков для начинающих”

C++. 20 уроков для начинающих

Даны основы программирования на С++ по стандартам С++17 и С++20, базовые структуры данных и методы работы с ними. С позиций разработки ПО рассмотрено программирование функций: обычных и рекурсивных, constexpr-функций, лямбда-выраженй и лямбда-функций, перегрузка и шаблоны функций. Раскрыты более сложные вопросы С++: указатели и динамическая память, структуры и классы, конструкторы и деструкторы, методы и перегрузка операций, работа с текстовыми файлами, устройство чисел и битовые операции.

Рассмотрены важные для начинающих темы: интегрированная среда Code::Blocks, русификация ввода и вывода, ошибки при написании кода, неопределенное поведение, тестирование и написание тестового кода. В книге 150 примеров программ и более 90 заданий для самостоятельной работы. Материал проверен на практике при обучении студентов и школьников и подготовке их к экзаменам.

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

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

 

Лаптев Валерий Викторович

Лаптев Валерий Викторович, кандидат технических наук, профессиональный программист и преподаватель, работает с компьютерами с 1971 года, программирует на С++ с 1989 года, преподает в вузе с 1993 года. За это время разработал большое количество программ на многих языках программирования. В вузе читал разнообразные курсы по программированию на С++, алгоритмам и структурам данных, системному программированию и операционным системам. Обучил и воспитал сотни учеников. Написал ряд книг по С++ для студентов вузов и колледжей. Его статьи публиковались в журналах “Программист” и “RSDN Magazine”, на портале программистов rsdn.org.

Книгу “C++. 20 уроков для начинающих” можно купить в нашем интенет-магазине.

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

Что вы найдете в книге. 12

Используемое ПО.. 13

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

Как связаться с автором. 14

ЧАСТЬ I. Знакомство с C++. 15

Урок 1. Начало. 16

Процесс создания программы. 17

Программы-инструменты. 19

Редактор кода. 19

Компилятор и линкер. 19

Консоль или терминал. 20

Интегрированная среда. 22

Онлайн-компиляторы. 23

Задачи и упражнения. 24

Урок 2. Здравствуй, С++. 25

Первая программа. 25

Директива #include. 26

Using-директива. 26

Функция main. 27

Заголовок функции. 27

Тело функции. 28

Оператор вывода. 28

Оператор return. 29

Пишем комментарии. 29

Копнем глубже. 31

Формат кода. 31

Директивы. 32

Алфавит и зарезервированные слова. 32

Модифицируем первую программу. 33

Специальные символы. 34

Необрабатываемые строковые литералы. 35

Снова рефакторинг. 36

Русские буквы в консоли. 37

Вывод по-русски в системе Windows 38

Немного арифметики. 38

Задачи и упражнения. 40

Урок 3. Погружаемся в С++. 42

Ввод данных. 42

Работаем со строками. 45

Снова таблица умножения. 49

Вычисления. 50

Вещественные числа. 50

Как писать вещественные константы. 51

Тестируем программу. 52

Вывод данных. 55

Манипуляторы. 55

Снова вычисляем. 56

Задачи и упражнения. 58

Урок 4. Встроенные типы данных. 60

Арифметические типы данных. 60

Вещественные типы. 60

Целые типы. 63

Операции, выражения и присваивания. 65

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

Присваивание. 67

Инкремент и декремент. 68

Преобразование типов. 69

Объявление переменных и констант. 71

Объявления auto. 73

Синонимы стандартных целых типов. 73

Объявление синонимов. 74

Порешаем задачи. 75

Задача 1. Математика должна быть экономной. 75

Задача 2. Стоимость учебников. 76

Задача 3. Число-палиндром. 77

Задачи и упражнения. 78

Урок 5. Выбор есть всегда. 80

Логический тип. 80

Логические операции и выражения. 81

Проверяем входные данные. 83

Условная операция. 83

Операция запятая. 84

Решаем задачу. 85

Условный оператор. 85

Решаем задачи. 88

Задача 1. Решить уравнение ax + b = 0. 88

Задача 2. Високосный год. 89

Булевские, целые и условия. 91

Ныряем глубже. 92

Задача 3. Кирпич и отверстие. 92

Никогда так не делайте. 93

Снова про ввод данных. 94

Задачи и упражнения. 96

Урок 6. Повторение — мать учения. 97

Повторяем работу. 97

Операторы цикла. 99

Оператор while. 99

Опять таблица умножения. 101

Оператор do while. 103

Оператор for со счетчиком. 104

Решаем задачи. 105

Полная таблица умножения. 105

Возведение в степень. 106

Вариации на тему циклов. 108

Операторная область видимости. 110

Операторы break и continue. 111

Задачи и упражнения. 112

Урок 7. Функции. 114

Объявление и вызов функции. 115

Как написать функцию.. 116

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

Осваиваем функции. 119

Математические функции с числом p. 120

Функция-предикат. 123

Список параметров и вызов функции. 124

Передача параметров по значению.. 125

Передача параметров по ссылке. 126

Константные параметры функций. 127

Область видимости и время жизни. 128

Сокрытие имен. 129

Статические переменные. 131

Автоматизация тестирования функций. 133

Стандартные средства тестирования. 134

Задачи и упражнения. 135

Урок 8. С пользой для дела. 137

Тренажер по таблице умножения. 137

Случайные числа. 138

Инициализация датчика случайных чисел. 138

Получение случайных чисел. 142

Разработка программы. 143

Оператор-переключатель. 146

Система обучения арифметике. 148

Пишем калькулятор. 149

Пишем еще один тренажер. 150

Задачи и упражнения. 152

ЧАСТЬ II. Работа с данными в C++. 153

Урок 9. Массивы.. 154

Зачем нужны массивы. 154

Встроенные массивы. 156

Объявление массивов. 156

Синонимы типов для массивов. 158

Доступ к элементам. 158

Размер массива. 159

Операции с массивами. 159

Новые массивы. 161

Размер и тип массива. 161

Новый цикл for 162

Массив array. 163

Объявление и инициализация. 163

Операции с массивом array. 164

Объекты типа initalizer_list 165

Решаем задачи. 165

Поиск минимума. 166

Подсчет максимумов. 167

Поиск заданного числа. 168

Задачи и упражнения. 170

Урок 10. Создаем новые типы.. 171

Структуры (классы) 171

Зачем нужны структуры (классы) 171

Определение структуры (класса) 172

Объявление и инициализация объектов. 174

Операции с объектами структурного типа. 176

Размеры структур. 177

Структуры, массивы, объекты и функции. 178

Массивы и структуры. 179

Структуры, объекты и функции. 180

Классы и структуры. 182

Конструкторы. 184

Методы. 186

Задачи и упражнения. 187

Урок 11. Знакомство с указателями. 188

Что такое указатели. 188

Две самые важные операции. 190

Объявление указателей. 191

Типизированные указатели. 192

Бестиповые указатели и преобразование типов. 193

nullptr 194

Константность. 195

Размеры указателей. 195

Указатели и ссылки. 196

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

Операции с указателями. 197

Указатели, итераторы и контейнеры. 200

Функция distance. 203

Итераторы ввода/вывода. 204

Задачи и упражнения. 205

Урок 12. Массивы и функции. 206

Массивы и функции. 206

Передача массива по ссылке. 207

Перегрузка функций. 209

Про массив array. 211

Шаблоны функций. 213

Стандартные алгоритмы. 216

Заполнение массива. 216

Заполнение случайными числами. 218

Поиск, подсчет, замена. 219

Числовые алгоритмы. 220

Задачи и упражнения. 220

Урок 13. Строки, строки, строки. 222

Строки как массивы символов. 222

Итераторы для строки. 223

Стандартные средства. 224

Строка — массив переменного размера. 224

Встроенные символьные массивы. 225

Размер встроенного символьного массива. 226

Обработка символьных массивов. 227

Универсальный параметр string_view. 229

Размеры строк STL. 230

Числа — прописью.. 231

Тестирование программы. 234

Длинные-длинные числа. 235

Символы — это числа. 235

Функция сложения. 236

Задачи и упражнения. 237

Урок 14. Снова о функциях. 238

Рекурсивные функции. 238

Осваиваем рекурсию.. 241

Формы рекурсивных функций. 243

Выполнение рекурсивных функций. 244

Рекурсивные функции и массивы. 245

Функции времени компиляции. 250

Задачи и упражнения. 253

Урок 15. Печальная действительность. 254

Проблемы с целыми числами. 254

На ноль делить нельзя. 257

Вещественные числа тоже не подарок. 258

0.1 + 0.2 != 0.3. 259

«Страшный зверь» по имени UB. 261

Как не наступать на «грабли». 263

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

Генерация исключений. 263

Перехват и обработка исключений. 266

Стандартные исключения. 268

Обработка «плавающих граблей». 269

Функции isnan, isinf, isfinite. 270

Задачи и упражнения. 270

ЧАСТЬ III. Вглубь C++. 271

Урок 16. Как все устроено. 272

Числа, числа и числа. 272

Числа как многочлены. 274

Перевод из десятичной в другую систему. 275

Перевод в десятичную систему. 277

Стандартные средства. 278

Перевод дробных чисел. 279

Битовое устройство беззнаковых целых. 281

Битовые операции. 282

Как писать двоичные литералы. 283

Исключающее ИЛИ.. 284

Сдвиги. 285

Битовое устройство целых со знаком. 286

Сдвиг вправо знакового целого числа. 288

Дополнительный код. 288

Задачи и упражнения. 289

Урок 17. Опять функции. 290

Параметры по умолчанию.. 290

Функции как параметры. 291

Функциональные объекты. 293

Указатель на функцию.. 293

Лямбды. 294

Лямбда-функции. 296

Захват. 298

Перегрузка операций. 299

Задачи и упражнения. 300

Урок 18. Снова указатели. 301

Память и объекты. 301

Динамическая память для встроенных типов. 302

Динамическая память для реализованных типов. 303

Деструктор. 304

Динамические массивы. 305

Размеры массивов. 307

Стандартный динамический массив vector 309

Объявление и инициализация вектора. 309

Размеры векторов. 310

Операции с вектором. 311

Снова длинные числа. 312

Многомерные массивы. 313

Динамические многомерные массивы. 316

Задачи и упражнения. 317

Урок 19. Учимся писать и читать. 318

Потоки. 318

Стандартные потоки. 319

Ввод встроенных типов. 319

Ввод строк с пробелами. 321

Пишем новый калькулятор. 322

Строковые потоки. 323

Файлы. 325

Файлы и потоки. 326

Читаем и пишем. 326

ЕГЭ и файлы. 329

Задачи и упражнения. 331

Урок 20. Большие программы.. 332

Проект «Арифметика». 333

Разделение на модули. 333

Вывод инструкции. 335

Первая сборка. 336

Межмодульное взаимодействие. 336

Связывание. 337

Пространства имен. 339

Добавим тренажеры. 339

Препроцессор и модули. 344

Задачи и упражнения. 345

Подведение итогов. 346

Приложения. 347

Приложение 1. Список литературы.. 348

Приложение 2. Перечень ресурсов Интернета. 349

Приложение 3. Установка Code::Blocks 350

Загрузка установщика в Windows 350

Установка Code::Blocks в Windows 352

Установка Code::Blocks в «Альт Образование». 355

Установка Code::Blocks в МОС. 355

Приложение 4. Интегрированная среда Code::Blocks 356

Запуск IDE и выход. 356

Выключение ненужных панелей инструментов. 357

Создание и сохранение исходного кода. 358

Создание файла. 358

Создание проекта. 360

Установка режимов компиляции. 362

Компиляция и сборка. 363

Сообщения об ошибках. 363

Выполнение программы. 364

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

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

“Создание встраиваемых систем: паттерны проектирования отличных программ, 2-е издание”

Создание встраиваемых систем. 2-е издание

Книга исследует теорию и практику проектирования встраиваемых систем. Рассматриваются различные паттерны низкоуровневого программирования, как классические, так и специфичные для датчиков и прочих электронных устройств. Затронутые темы: обработка сигналов, реагирование на прерывания, объединение устройств в сеть, обеспечение безопасного хранения данных, работа с интеллектуальными устройствами, входящими в состав Интернета вещей, управление вводом и выводом информации, регулирование электропитания и энергопотребления. Особое внимание уделено математической и алгоритмической составляющей разработки на платформах с ограниченными ресурсами , а также созданию и оптимизации прошивки.

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

Перед вами книга, которая легко читается и прививает качественные приемы разработки программ, основанные на классических паттернах проектирования и новых паттернах, специфичных именно для разработки встраиваемого ПО.

Вы научитесь создавать системную архитектуру для процессоров, а не для операционных систем, узнаете, как справляться с различными аппаратными сложностями, менять принципиальные схемы и подстраиваться под меняющиеся требования производства.

Автор книги – настоящий эксперт, программировала приборы от сканеров ДНК до детских игрушек. Поэтому книга идеально подойдёт читателям от продвинутого до экспертного уровня, независимо от того, с какой платформой приходится работать. В расширенном втором издании появились главы об Интернете вещей, сетях сенсоров, о двигателях и движении, об отладке, стратегиях обработки данных и о многом другом.

С книгой вы научитесь:

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

Элесия Уайт снова радует! Во втором издании её прославленной книги доступно и интересно рассказано об удивительной сфере разработки встраиваемого программного обеспечения. Раскрыты все важные темы, помогающие новичкам сориентироваться в тонкостях разработки встраиваемых систем, соответствующих паттернах и инструментах.
Миро Самек, эксперт по встраиваемым системам, автор, технических книг и курсов, преподаватель

Книгу “Создание встраиваемых систем: паттерны проектирования отличных программ, 2-е издание” можно купить в нашем интенет-магазине.

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

“Машинное обучение для приложений высокого риска: подходы к ответственному искусственному интеллекту”

Машинное обучение для приложений высокого риска

Книга представляет собой комплексное руководство по применению искусственного интеллекта и машинного обучения (ИИ/ML)  с целью снижения рисков для современного бизнеса, связанного с использованием этих технологий. Рассмотрены основы управления рисками и компьютерной безопасности, нормативные акты, ответственность за качество продуктов, основанных на ML, а также объяснимые модели и методы их проверки, включая новый фреймворк управления рисками NIST AI. Читателю предложен углубленный взгляд на программирование с использованием Python и  подробными примерами для структурированных и неструктурированных данных. Особое внимание уделяется объяснимым бустинговым машинам, библиотеке XGBoost и методам повышения качества моделей ML. Представлены основанные на реальном опыте советы о том, как организовать успешную работу с приложениями высокого риска. Приведены практические примеры, иллюстрирующие важность и сложность внедрения ML в различных отраслях.

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

В рамках подходов к ответственному использованию ИИ в книге описана целостная структура для улучшения технологии ИИ/МО, бизнес-процессов и культурных компетенций, основанная на лучших практиках управления рисками, кибербезопасности, конфиденциальности данных и прикладных социальных наук.

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

  • Изучите технические методы разработки ответственного ИИ в таких вопросах как объяснимость, проверка и отладка моделей, управление предвзятостью, конфиденциальность данных и безопасность ML
  • Уделите особое внимание объяснимым бустинговым машинам, библиотеке XGBoost и методам повышения качества моделей
  • Узнайте, как создать успешную и эффективную систему управления рисками
  • Ознакомьтесь с обзором действующих стандартов, законов и критериев оценки технологий ИИ, включая новый фреймворк управления рисками NIST AI
  • Воспользуйтесь наглядными примерами углубленного программирования на Python , а также интерактивными ресурсами на GitHub и Colab

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

Краткое оглавление…………………………………………………………………………………. 5

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

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

Введение………………………………………………………………………………………………… 21

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

Что вы узнаете из этой книги…………………………………………………………………………………………………….. 22

Соответствие системе управления рисками искусственного интеллекта NIST………… 24

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

Часть I……………………………………………………………………………………………………………………………… 25

Часть II…………………………………………………………………………………………………………………………….. 26

Часть III…………………………………………………………………………………………………………………………… 26

Примеры наборов данных………………………………………………………………………………………………………… 26

Кредитные данные Тайваня………………………………………………………………………………………….. 27

Данные рентгенографии грудной клетки Kaggle………………………………………………………….. 28

Условные обозначения, принятые в этой книге………………………………………………………………………. 29

Архив с иллюстрациями к книге……………………………………………………………………………………………….. 29

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

Часть I. Теория и практика управления рисками в приложениях ИИ            31

Глава 1. Современное управление рисками в ML…………………………………… 33

Обзор нормативно-правовой базы…………………………………………………………………………………………… 34

Закон ЕС об искусственном интеллекте……………………………………………………………………….. 34

Федеральные законы и правила США………………………………………………………………………….. 35

Государственные и муниципальные законы……………………………………………………………….. 36

Изначальная ответственность за качество продукта………………………………………………….. 37

Правоприменительная практика Федеральной торговой комиссии………………………….. 38

Авторитетные методики……………………………………………………………………………………………………………. 39

Инциденты с ИИ…………………………………………………………………………………………………………………………. 41

Культурные аспекты управления рисками машинного обучения………………………………………… 44

Организационная ответственность……………………………………………………………………………….. 44

Культура эффективного испытания……………………………………………………………………………… 46

Разнообразные и опытные команды…………………………………………………………………………….. 46

Испытание продукта на себе…………………………………………………………………………………………. 47

Двигайтесь быстро и ломайте устои…………………………………………………………………………….. 47

Организационные процессы управления рисками машинного обучения…………………………….. 48

Прогнозирование возможных отказов………………………………………………………………………….. 48

Известные отказы…………………………………………………………………………………………………… 49

Неспособность предвидения…………………………………………………………………………………. 49

Процессы управления модельными рисками……………………………………………………………….. 50

Уровни риска………………………………………………………………………………………………………….. 50

Документация модели……………………………………………………………………………………………. 51

Мониторинг модели……………………………………………………………………………………………….. 52

Инвентарный учет моделей…………………………………………………………………………………… 53

Проверка системы и аудит процессов………………………………………………………………….. 53

Управление изменениями………………………………………………………………………………………. 54

За пределами управления модельными рисками………………………………………………………… 54

Аудит и оценка модели………………………………………………………………………………………….. 55

Оценка воздействия………………………………………………………………………………………………… 55

Подача апелляции, отмена решения и отказ от участия……………………………………. 56

Парное и двойное программирование………………………………………………………………….. 56

Ограничение полномочий при развертывании модели………………………………………. 57

Награда за обнаружение ошибок…………………………………………………………………………. 57

Реагирование на инциденты с ИИ…………………………………………………………………………. 58

Пример: взлет и падение iBuying от Zillow………………………………………………………………………………. 60

Последствия…………………………………………………………………………………………………………………….. 61

Какие уроки мы можем извлечь?…………………………………………………………………………………… 61

Ресурсы……………………………………………………………………………………………………………………………………….. 64

Глава 2. Интерпретируемость и объяснимость……………………………………….. 65

Машинное обучение………………………………………………………………………………………………………………….. 65

Важные принципы интерпретируемости и объяснимости…………………………………………………….. 66

Объяснимые модели…………………………………………………………………………………………………………………… 71

Аддитивные модели……………………………………………………………………………………………………….. 71

Регрессия со штрафом……………………………………………………………………………………………. 71

Обобщенные аддитивные модели…………………………………………………………………………. 75

GA2M и объяснимые бустерные машины……………………………………………………………. 76

Деревья решений…………………………………………………………………………………………………………….. 76

Одиночные деревья решений………………………………………………………………………………… 76

Ограниченные модели XGBoost……………………………………………………………………………. 79

Экосистема объяснимых моделей машинного обучения……………………………………………. 79

Апостериорное объяснение………………………………………………………………………………………………………. 82

Атрибуция и важность признаков…………………………………………………………………………………. 83

Локальные объяснения и атрибуция признаков………………………………………………….. 84

Глобальная значимость признака………………………………………………………………………… 91

Суррогатные модели……………………………………………………………………………………………………… 95

Суррогатные модели дерева решений…………………………………………………………………. 95

Линейные модели и локально интерпретируемые объяснения………………………….. 97

Якоря и правила……………………………………………………………………………………………………… 99

Графическое представление характеристик модели………………………………………………….. 99

Частичная зависимость и индивидуальное условное ожидание……………………….. 99

Накопленный локальный эффект……………………………………………………………………….. 102

Профилирование кластеров………………………………………………………………………………………… 102

Трудноразрешимые проблемы апостериорного объяснения на практике…………………………. 103

Сочетание объяснимых моделей и апостериорных объяснений………………………………………… 107

Пример: алгоритмическая корректировка оценок………………………………………………………………… 109

Ресурсы…………………………………………………………………………………………………………………………………….. 112

Глава 3. Отладка систем машинного обучения…………………………………….. 113

Обучение…………………………………………………………………………………………………………………………………… 114

Воспроизводимость……………………………………………………………………………………………………… 115

Качество данных………………………………………………………………………………………………………….. 116

Спецификация модели для вывода в реальных условиях…………………………………………. 121

Бенчмарки и их альтернативы……………………………………………………………………………. 121

Калибровка…………………………………………………………………………………………………………… 121

Конструктная валидность…………………………………………………………………………………… 122

Предположения и ограничения…………………………………………………………………………… 123

Функции потерь по умолчанию………………………………………………………………………….. 123

Множественные сравнения…………………………………………………………………………………. 123

Будущее безопасного и надежного машинного обучения……………………………….. 124

Отладка модели……………………………………………………………………………………………………………………….. 124

Тестирование программного обеспечения…………………………………………………………………. 125

Традиционная оценка модели…………………………………………………………………………………….. 126

Распространенные ошибки ML…………………………………………………………………………………… 128

Смещение распределений……………………………………………………………………………………. 128

Эпистемическая неопределенность и разреженность данных………………………… 129

Нестабильность……………………………………………………………………………………………………. 130

Утечка……………………………………………………………………………………………………………………. 131

Петля обратной связи…………………………………………………………………………………………… 132

Переобучение……………………………………………………………………………………………………….. 132

Ложное обучение…………………………………………………………………………………………………. 133

Недостаточное обучение…………………………………………………………………………………….. 134

Неполная идентификация……………………………………………………………………………………. 134

Анализ остатков……………………………………………………………………………………………………………. 137

Анализ и визуализация остатков………………………………………………………………………… 137

Моделирование остатков……………………………………………………………………………………. 138

Локальный вклад в остатки…………………………………………………………………………………. 139

Анализ чувствительности……………………………………………………………………………………………. 141

Эталонные модели……………………………………………………………………………………………………….. 144

Исправление ошибок……………………………………………………………………………………………………. 145

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

Безопасность в предметной области………………………………………………………………………….. 148

Мониторинг модели……………………………………………………………………………………………………… 150

Устаревание модели и дрейф концепта……………………………………………………………… 150

Обнаружение и устранение дрейфа……………………………………………………………………. 151

Мониторинг нескольких ключевых показателей эффективности……………………. 152

Значения вне диапазона………………………………………………………………………………………. 152

Обнаружение аномалий и эталонные модели…………………………………………………… 152

Аварийные выключатели…………………………………………………………………………………….. 153

Пример: смерть от автономного транспортного средства…………………………………………………… 154

Последствия………………………………………………………………………………………………………………….. 154

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

Какие уроки мы можем извлечь?…………………………………………………………………………………. 155

Ресурсы…………………………………………………………………………………………………………………………………….. 156

Глава 4. Борьба с предвзятостью в машинном обучении……………………… 157

Определения предвзятости в ISO и NIST……………………………………………………………………………….. 159

Системная предвзятость………………………………………………………………………………………………. 160

Статистическая предвзятость……………………………………………………………………………………… 160

Человеческая предвзятость и культура науки о данных………………………………………….. 160

Правовые понятия предвзятости ML в США…………………………………………………………………………. 162

Кто обычно страдает от предвзятости систем ML……………………………………………………………….. 165

Ущерб от предвзятости, который испытывают люди…………………………………………………………… 167

Тестирование на предвзятость……………………………………………………………………………………………….. 169

Проверка данных………………………………………………………………………………………………………….. 169

Традиционные подходы: тестирование эквивалентных результатов…………………….. 172

Тестирование статистической значимости……………………………………………………….. 174

Проверка практической значимости………………………………………………………………….. 174

Новый взгляд: тестирование эквивалентности качества работы…………………………….. 176

Чего нам ожидать: тесты для более широкой экосистемы машинного обучения….. 178

Сводный план тестирования……………………………………………………………………………………….. 181

Смягчение предвзятости………………………………………………………………………………………………………….. 183

Технические факторы смягчения предвзятости…………………………………………………………. 184

Научный подход и план эксперимента………………………………………………………………………. 184

Методы смягчения предвзятости………………………………………………………………………………… 186

Человеческий фактор в смягчении предвзятости……………………………………………………….. 190

Пример: вознаграждение за выявленные ошибки предвзятости…………………………………………. 193

Ресурсы…………………………………………………………………………………………………………………………………….. 196

Глава 5. Безопасность машинного обучения………………………………………… 197

Основы безопасности………………………………………………………………………………………………………………. 199

Состязательное мышление………………………………………………………………………………………….. 199

Триада CIA……………………………………………………………………………………………………………………. 200

Лучшие методы обеспечения безопасности для специалистов по данным……………. 201

Атаки на системы ML……………………………………………………………………………………………………………… 204

Атаки на целостность: манипулирование результатами машинного обучения…….. 204

Примеры состязательных атак……………………………………………………………………………. 205

Бэкдор-атаки………………………………………………………………………………………………………… 205

Атаки с отравлением данных……………………………………………………………………………… 206

Атаки путем подмены личности и уклонения……………………………………………………. 207

Атаки на объяснения машинного обучения………………………………………………………. 208

Атаки на конфиденциальность: извлеченная информация………………………………………. 209

Атаки извлечения и инверсии модели………………………………………………………………… 209

Атаки с выводом о членстве………………………………………………………………………………… 210

Общие проблемы безопасности ML………………………………………………………………………………………. 211

Меры противодействия…………………………………………………………………………………………………………… 214

Отладка модели в целях безопасности………………………………………………………………………. 214

Поиск состязательных примеров и анализ чувствительности…………………………. 214

Аудит на предмет инсайдерского отравления данных…………………………………….. 215

Тестирование на предвзятость……………………………………………………………………………. 215

Этический взлом: атаки с извлечением моделей……………………………………………….. 215

Мониторинг модели в целях безопасности………………………………………………………………… 216

Технологии повышения конфиденциальности…………………………………………………………… 218

Федеративное обучение………………………………………………………………………………………. 218

Дифференциальная приватность………………………………………………………………………… 218

Робастное машинное обучение…………………………………………………………………………………… 221

Универсальные контрмеры………………………………………………………………………………………….. 221

Пример: реальные атаки уклонения………………………………………………………………………………………. 224

Атаки уклонения…………………………………………………………………………………………………………… 224

Какие уроки мы можем извлечь?…………………………………………………………………………………. 225

Ресурсы…………………………………………………………………………………………………………………………………….. 226

Часть II. Управление рисками ИИ в действии……………………. 227

Глава 6. Объяснимые бустинговые машины и модели XGBoost…………… 229

Уточнение определений и прозрачность машинного обучения………………………………………….. 229

Аддитивность или взаимодействия…………………………………………………………………………….. 230

Переход к причинно-следственной связи с ограничениями……………………………………… 231

Частичная зависимость и индивидуальное условное ожидание……………………………… 231

Значения Шепли…………………………………………………………………………………………………………… 234

Документация модели………………………………………………………………………………………………….. 235

Семейство объяснимых моделей GAM………………………………………………………………………………….. 236

Elastic Net — штрафуемая GLM с альфа- и лямбда-поиском……………………………………. 236

Обобщенные аддитивные модели……………………………………………………………………………….. 239

GA2M и объяснимые бустинговые машины………………………………………………………………. 244

XGBoost с ограничениями и апостериорными пояснениями……………………………………………….. 247

XGBoost с ограничениями и без ограничений……………………………………………………………. 247

Объяснение поведения модели с помощью частичной зависимости и ICE…………….. 253

Суррогатные модели дерева решений как метод объяснения………………………………….. 255

Пояснения на основе значений Шепли……………………………………………………………………….. 259

Проблемы со значениями Шепли………………………………………………………………………………… 262

Более информированный выбор модели……………………………………………………………………. 266

Ресурсы…………………………………………………………………………………………………………………………………….. 268

Глава 7. Объяснение классификатора изображений PyTorch……………….. 271

Как работает классификация рентгенограмм грудной клетки……………………………………………. 272

Новый взгляд на объяснимые модели и методы апостериорного объяснения…………………… 273

Обзор объяснимых моделей………………………………………………………………………………………… 273

Методы окклюзии…………………………………………………………………………………………………………. 274

Градиентные методы……………………………………………………………………………………………………. 274

Объяснимый ИИ для отладки моделей……………………………………………………………………….. 275

Объяснимые модели………………………………………………………………………………………………………………… 275

ProtoPNet и ее варианты………………………………………………………………………………………………. 276

Другие объяснимые модели глубокого обучения……………………………………………………… 277

Обучение и объяснение классификатора изображений PyTorch………………………………………… 278

Обучающие данные……………………………………………………………………………………………………… 278

Решение проблемы дисбаланса наборов данных……………………………………………………… 279

Дополнение данных и обрезка изображений…………………………………………………………….. 280

Обучение модели………………………………………………………………………………………………………….. 282

Оценка и метрики………………………………………………………………………………………………………….. 284

Создание апостериорных объяснений с помощью Captum……………………………………… 284

Окклюзия……………………………………………………………………………………………………………………….. 285

input*gradient………………………………………………………………………………………………………… 286

Интегрированные градиенты………………………………………………………………………………. 287

Послойное распространение релевантности…………………………………………………….. 289

Оценка пояснений модели……………………………………………………………………………………………. 290

Надежность апостериорных объяснений…………………………………………………………………… 291

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

Ресурсы…………………………………………………………………………………………………………………………………….. 296

Глава 8. Выбор и отладка моделей XGBoost…………………………………………. 299

Уточнение определений: отладка моделей ML……………………………………………………………………. 299

Выбор модели……………………………………………………………………………………………………………….. 300

Анализ чувствительности……………………………………………………………………………………………. 300

Анализ остатков……………………………………………………………………………………………………………. 302

Исправление………………………………………………………………………………………………………………….. 303

Выбор лучшей модели XGBoost…………………………………………………………………………………………….. 304

Анализ чувствительности XGBoost……………………………………………………………………………………….. 309

Стресс-тестирование модели XGBoost………………………………………………………………………. 310

Методика стресс-тестирования…………………………………………………………………………………… 311

Изменение данных для моделирования условий рецессии………………………………………. 312

Поиск состязательных примеров………………………………………………………………………………… 314

Анализ остатков для XGBoost………………………………………………………………………………………………… 318

Анализ и визуализация остатков………………………………………………………………………………… 319

Сегментный анализ ошибок………………………………………………………………………………………… 323

Моделирование остатков…………………………………………………………………………………………….. 325

Исправление выбранной модели……………………………………………………………………………………………. 327

Чрезмерная важность признака PAY_0………………………………………………………………………. 328

Разные ошибки……………………………………………………………………………………………………………… 330

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

Ресурсы…………………………………………………………………………………………………………………………………….. 334

Глава 9. Отладка классификатора изображений PyTorch…………………….. 335

Уточнение понятий: отладка моделей DL…………………………………………………………………………….. 337

Отладка классификатора изображений PyTorch………………………………………………………………….. 341

Качество данных и утечки…………………………………………………………………………………………… 341

Тестирование программного обеспечения для DL……………………………………………………. 343

Анализ чувствительности моделей DL……………………………………………………………………….. 344

Тестирование на смещение домена и субпопуляции………………………………………… 345

Примеры состязательных атак……………………………………………………………………………. 349

Возмущение вычислительных гиперпараметров………………………………………………. 352

Устранение проблем…………………………………………………………………………………………………….. 352

Исправление данных……………………………………………………………………………………………. 353

Исправления программного обеспечения………………………………………………………….. 355

Исправления чувствительности………………………………………………………………………………….. 359

Внесение шума……………………………………………………………………………………………………… 359

Другие способы улучшения стабильности………………………………………………………… 360

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

Ресурсы…………………………………………………………………………………………………………………………………….. 364

Глава 10. Тестирование и исправление предвзятости
с помощью XGBoost……………………………………………………………………………… 365

Уточнение понятий: управление предвзятостью в ML………………………………………………………… 366

Обучение модели………………………………………………………………………………………………………….. 369

Оценка моделей на предмет предвзятости…………………………………………………………………………….. 373

Способы тестирования для групп……………………………………………………………………………….. 374

Тестирование качества прогнозов……………………………………………………………………… 376

Традиционное тестирование показателей исходов………………………………………….. 381

Индивидуальная справедливость……………………………………………………………………………….. 384

Опосредованная предвзятость…………………………………………………………………………………….. 388

Исправление предвзятости……………………………………………………………………………………………………… 389

Предварительная обработка……………………………………………………………………………………….. 390

Внутренняя обработка…………………………………………………………………………………………………. 394

Постобработка……………………………………………………………………………………………………………… 398

Выбор модели……………………………………………………………………………………………………………….. 399

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

Ресурсы…………………………………………………………………………………………………………………………………….. 406

Глава 11. Атака красной команды на XGBoost……………………………………. 407

Уточнение понятий………………………………………………………………………………………………………………….. 408

Триада CIA……………………………………………………………………………………………………………………. 408

Атаки……………………………………………………………………………………………………………………………… 409

Контрмеры…………………………………………………………………………………………………………………….. 411

Обучение модели……………………………………………………………………………………………………………………… 412

Атаки с участием красной команды………………………………………………………………………………………. 417

Атаки с извлечением моделей……………………………………………………………………………………… 417

Атаки с состязательными примерами…………………………………………………………………………. 421

Атаки вывода о членстве……………………………………………………………………………………………… 423

Отравление данных……………………………………………………………………………………………………… 425

Бэкдоры…………………………………………………………………………………………………………………………. 427

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

Ресурсы…………………………………………………………………………………………………………………………………….. 432

Часть III. Заключение…………………………………………………………………. 435

Глава 12. Как добиться успеха в машинном обучении высокого риска.. 437

Кто в команде?…………………………………………………………………………………………………………………………. 438

Наука или техника?…………………………………………………………………………………………………………………. 440

Метод анализа данных………………………………………………………………………………………………… 440

Научный метод…………………………………………………………………………………………………………….. 442

Оценка опубликованных результатов и заявлений………………………………………………………………. 443

Применяйте внешние стандарты……………………………………………………………………………………………. 445

Смягчение рисков на основе здравого смысла……………………………………………………………………… 448

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

Ресурсы…………………………………………………………………………………………………………………………………….. 452

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

Об авторах……………………………………………………………………………………………. 457

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

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

Новинка: “Мастер веб-разработки на Python, Django и Bootstrap”

Мастер веб-разработки на Python, Django и Bootstrap

Книга представляет собой практическое руководство по интеграции фреймворка Bootstrap 5 с шаблонами Django для разработки на языке Python современных и динамичных веб-приложений. Рассматриваются основы макетирования HTML-страниц, создание статичных элементов (кнопки, панели, модальные окна, аккордеоны) и разработка динамичных компонентов, управляемых через административную панель Django или интерфейс личного кабинета администратора. Описаны технологии работы с древовидными структурами, создание модальных окон с использованием библиотеки HTMX, а также базовые модули для разработки интернет-магазина, включая корзину, заказы и оплату. Приведены полезные советы по работе с файлами PDF, анимацией, переводами на другие языки и почтовыми сообщениями. Отдельное внимание уделено визуализации данных с помощью библиотек Plotly.py и Plotly.js для создания интерактивных 2D- и 3D-графиков.
Книга имеет интерактивный цифровой аналог, позволяющий запускать на выполнение программные модули всех примеров, скачивать листинги программ, озвучивать текст и переводить его на различные языки, а также смотреть цветные иллюстрации.

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

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

  • Макетирование HTML страниц с использованием новых элементов Bootstrap
  • Модальные окна в шаблонах Django и на основе библиотеки HTMX
  • Динамичные элементы Bootstrap в шаблонах Django
  • Древовидные структуры пользовательского интерфейса с библиотекой Django-MPTT
  • Интернет-магазин с управлением каталогом продуктов и сменой интерфейса без изменения программного кода
  • Статичные и интерактивные 2D- и 3D-графики с библиотекой Plotly.py
  • Анимированные 2D- и 3D-графики с библиотекой Plotly.js

Книгу “Мастер веб-разработки на Python, Django и Bootstrap” можно приобрести в нашем интернет-магазине.

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

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

О примерах кода……………………………………………………………………………………………………………………….. 14

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

1.1. Что нового в Bootstrap 5?……………………………………………………………………………………………………. 16

1.1.1. Наиболее важные изменения…………………………………………………………………………………… 16

Библиотека jQuery больше не является зависимостью…………………………………………. 16

Изменение поддержки браузеров……………………………………………………………………………. 17

Изменение атрибутов данных…………………………………………………………………………………. 17

Что было удалено?…………………………………………………………………………………………………… 18

1.1.2. Наиболее важные дополнения………………………………………………………………………………… 19

Адаптивные размеры шрифтов теперь включены по умолчанию……………………….. 19

Поддержка написания справа налево……………………………………………………………………. 19

Новая точка останова……………………………………………………………………………………………… 19

Темная и светлая тема……………………………………………………………………………………………… 19

Создание модальных окон через атрибуты данных…………………………………………….. 20

1.1.3. Новые компоненты……………………………………………………………………………………………………. 20

Аккордеон…………………………………………………………………………………………………………………. 20

Offcanvas……………………………………………………………………………………………………………………. 20

Плавающая этикетка……………………………………………………………………………………………….. 20

1.1.4. Прочие улучшения и изменения………………………………………………………………………………. 20

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

1.2.1. Использование сети CDN…………………………………………………………………………………………. 22

1.2.2. Скачивание файлов Bootstrap………………………………………………………………………………….. 24

1.3. Контейнеры и сетка Bootstrap……………………………………………………………………………………………. 24

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

Адаптивно-фиксированный контейнер…………………………………………………………………… 26

Адаптивно-подвижный, или «резиновый», контейнер…………………………………………… 27

1.3.2. Ряды, или строки (row)……………………………………………………………………………………………… 27

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

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

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

1.4. Верстка макета HTML-страниц………………………………………………………………………………………… 30

1.4.1. Выравнивание адаптивных блоков…………………………………………………………………………. 31

Вертикальное выравнивание адаптивных блоков………………………………………………… 31

Горизонтальное выравнивание адаптивных блоков…………………………………………….. 31

1.4.2. Смещение адаптивных блоков………………………………………………………………………………… 32

Смещение с помощью классов offset………………………………………………………………………. 32

Смещение с помощью классов margin……………………………………………………………………. 33

1.5. Простейшая HTML-страница с подключением фреймворка Bootstrap…………………………. 36

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

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

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

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

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

1.11. Таблицы Bootstrap……………………………………………………………………………………………………………. 56

1.12. Адаптивные таблицы в Bootstrap (с полосами прокрутки)…………………………………………… 64

1.13. Краткие итоги……………………………………………………………………………………………………………………. 69

Глава 2. Статичные элементы Bootstrap в шаблонах Django………………….. 71

2.1. Задание произвольного цвета элементам Bootstrap………………………………………………………… 71

2.2. Тег include для встраивания шаблонов Django………………………………………………………………… 75

2.3. Подключение значков к элементам Bootstrap………………………………………………………………….. 77

2.4. Разделение страницы на вкладки компонентом Tabs………………………………………………………. 81

2.4.1. Традиционные горизонтальные вкладки Tabs фреймворка Bootstrap…………………. 81

2.4.2. Традиционные вертикальные вкладки Tabs фреймворка Bootstrap…………………….. 85

2.4.3. Горизонтальные вкладки Tabs с использованием тега Django
для организации циклов…………………………………………………………………………………………………….. 88

2.4.4. Вертикальные кнопки для навигации по вкладкам Tabs фреймворка
Bootstrap………………………………………………………………………………………………………………………………. 90

2.5. Компонент Bootstrap Ofcanvas…………………………………………………………………………………………… 92

2.6. Компонент для выдачи подсказок Tooltip………………………………………………………………………… 97

2.7. Использование атрибута href в шаблонах Django для создания ссылок
на URL-адреса…………………………………………………………………………………………………………………….. 98

2.7.1. Ссылки на внешние URL-адреса……………………………………………………………………………… 99

2.7.2. Ссылки на внутренние URL-адреса………………………………………………………………………. 101

2.7.3. Ссылки на внутренние динамичные URL-адреса………………………………………………… 103

2.7.4. Использование атрибута href для обмена параметрами между шаблонами и представлениями     108

2.8. Всплывающие модальные окна………………………………………………………………………………………. 115

2.8.1. Простое модальное окно………………………………………………………………………………………… 119

2.8.2. Модальное окно с полосой прокрутки…………………………………………………………………. 121

2.8.3. Широкое модальное окно………………………………………………………………………………………. 124

2.9. Компонент Bootstrap Accordion («Аккордеон»)……………………………………………………………… 126

2.9.1. Класс accordion………………………………………………………………………………………………………. 126

2.9.2. Класс accordion-flush……………………………………………………………………………………………… 130

2.10. Компонент Bootstrap card («Карточки»)………………………………………………………………………. 134

2.10.1. Карточка с параметрами по умолчанию……………………………………………………………. 134

2.10.2. Карточка с параметрами цвета…………………………………………………………………………… 135

2.10.3. Группы карточек…………………………………………………………………………………………………… 138

2.11. Компонент Bootstrap Carousel («Карусель»)……………………………………………………………….. 140

2.11.1. Статичная карусель с фиксированным контентом……………………………………………. 140

2.12. Краткие итоги………………………………………………………………………………………………………………….. 145

Глава 3. Динамичные элементы Bootstrap в шаблонах Django……………… 147

3.1. Динамичный «Аккордеон» с заполнением вкладок через административную
панель Django……………………………………………………………………………………………………………………. 147

3.2. Динамичный аккордеон с заполнением вкладок через интерфейс пользователя……….. 151

3.2.1. Программные модули для создания динамичных элементов «Аккордеон»………. 156

3.2.2. Модули для вывода динамичных аккордеонов на страницы сайта………………….. 168

3.2.3. Пример создания динамичного аккордеона через интерфейс пользователя…….. 174

3.2.4. Пример вывода динамичного аккордеона на страницу сайта…………………………… 177

3.3. Динамичные карточки с заполнением контента через административную панель…… 181

3.4. Динамичные карточки с заполнением контента через интерфейс пользователя……….. 186

3.4.1. Программные модули для создания динамичных карточек……………………………….. 190

3.4.2. Пример формирования динамичных карточек через интерфейс пользователя… 198

3.4.3. Модули для вывода динамичных карточек на страницы сайта………………………… 200

3.4.4. Пример отображения динамичных карточек на страницах сайта…………………….. 205

3.5. Динамичная карусель с заполнением контента через административную панель……. 207

3.6. Динамичная карусель с заполнением контента через интерфейс пользователя………… 212

3.6.1. Программные модули для создания слайдов динамичной карусели………………… 214

3.6.2. Пример формирования слайдов динамичной карусели через интерфейс пользователя      221

3.6.3. Модули для вывода динамичных каруселей на страницы сайта………………………. 222

3.6.4. Примеры отображения динамичных каруселей на страницах сайта……………….. 225

3.7. Краткие итоги……………………………………………………………………………………………………………………. 226

Глава 4. Древовидные структуры в шаблонах Django………………………….. 227

4.1. Использование Django-mptt для создания древовидных структур………………………………. 227

4.2. Формирование дерева категорий продуктов с использованием административной панели Django           231

4.2.1. Отображение статичного дерева категорий продуктов в шаблонах Django……. 233

4.2.2. Отображение динамичного дерева категорий продуктов в шаблонах Django…. 236

4.3. Формирование дерева категорий продуктов с использованием интерфейса пользователя           239

4.3.1. Модель для категорий продуктов…………………………………………………………………………. 240

4.3.2. Модули для отображения дерева категорий продуктов…………………………………….. 241

4.3.3. Модули для добавления корня к дереву категорий продуктов………………………….. 245

4.3.4. Модули для добавления дочерних категорий продуктов…………………………………… 249

4.3.5. Модули для обновления категорий продуктов……………………………………………………. 255

4.3.6. Модули для удаления категорий продуктов………………………………………………………… 256

4.4. Создание списков объектов с фильтрацией через древовидные каталоги………………….. 258

4.4.1. Модель для хранения категорий продуктов………………………………………………………… 258

4.4.2. Модель для хранения сведений о продуктах……………………………………………………….. 260

4.4.3. Форма для ввода сведений о продуктах……………………………………………………………….. 262

4.4.4. Редактор продуктов………………………………………………………………………………………………… 262

4.4.5. Модули для добавления в БД продуктов (товара)………………………………………………. 268

4.4.6. Модули для обновления сведений о продуктах…………………………………………………… 271

4.4.7. Модули для удаления продукта из БД…………………………………………………………………. 273

4.4.8. Модули для показа подробностей о продуктах………………………………………………….. 274

4.5. Фильтрация сведений о продуктах с использованием статичного древовидного каталога категорий продуктов 276

4.6. Фильтрация сведений о продуктах с использованием динамичного древовидного каталога категорий продуктов     284

4.7. Создание древовидных меню с использованием плагина megamenu-js……………………… 293

4.7.1. Плагин megamenu-js: подготовка к работе………………………………………………………….. 293

4.7.2. Создание мегаменю на основе плагина megamenu-js…………………………………………. 295

4.8. Фильтрация продуктов с использованием панели инструментов и древовидного каталога категорий     300

4.9. Краткие итоги……………………………………………………………………………………………………………………. 314

Глава 5. Библиотека HTMX: модальные окна для ввода
и корректировки данных……………………………………………………………………… 315

5.1. Библиотека HTMX……………………………………………………………………………………………………………. 315

5.2. Ввод и редактирования сведений о клиентах сайта с модальными окнами
на основе библиотеки HTMX…………………………………………………………………………………………… 317

5.2.1. Модель и форма для ввода данных………………………………………………………………………. 317

5.2.2. Модули для создания редактора списка клиентов……………………………………………… 319

5.2.3. Модули для добавления клиентов в БД………………………………………………………………… 325

5.2.4. Программируем кнопку Изменить — для корректировки в БД сведений о клиентах……….. 327

5.2.5. Программируем кнопку Удалить — для удаления из БД сведений
о клиентах…………………………………………………………………………………………………………………………. 328

5.2.6. Программируем модули для показа подробных сведений о клиентах……………… 330

5.2.7. Испытание программных модулей для редактирования сведений
о клиентах в модальных окнах……………………………………………………………………………………….. 332

5.3. Краткие итоги……………………………………………………………………………………………………………………. 338

Глава 6. Интернет-магазин…………………………………………………………………… 339

6.1. Обмен данными между представлениями и шаблонами……………………………………………….. 340

6.1.1. Обмен данными через сессии…………………………………………………………………………………. 340

6.1.2. Обмен данными через контекстный процессор……………………………………………………. 341

6.2. Модели для корзины и заказов клиентов магазина электронной торговли………………… 342

6.3. Контекстный процессор для магазина электронной торговли…………………………………….. 344

6.4. Создаем магазин пользователя……………………………………………………………………………………….. 347

6.4.1. Вывод категорий продуктов в левой боковой панели магазина
(дерево свернуто)……………………………………………………………………………………………………………… 350

6.4.2. Проверка работы модулей магазина пользователя с фильтрацией данных по свернутому дереву категорий продуктов………………………………………………………………………………………………………………………….. 357

6.4.3. Вывод категорий продуктов в левой боковой панели магазина
(дерево раскрыто)…………………………………………………………………………………………………………….. 361

6.4.4. Проверка работы модулей магазина пользователя с фильтрацией данных по раскрытому дереву категорий продуктов………………………………………………………………………………………………………………………….. 364

6.4.5. Вывод категорий продуктов в центральной панели в виде мегаменю………………. 368

6.4.6. Проверка работы модулей магазина пользователя с фильтрацией данных по дереву категорий продуктов в виде мегаменю…………………………………………………………………………………………………………………………… 371

6.5. Модули формирования корзины (предварительного заказа)……………………………………….. 375

6.5.1. Добавление продуктов (товаров) в корзину…………………………………………………………. 375

6.5.2. Вывод содержимого корзины (предварительного заказа)………………………………….. 378

6.5.3. Корректировка количества товара в корзине………………………………………………………. 382

6.5.4. Удаление товара из корзины…………………………………………………………………………………. 387

6.5.5. Формирование заказа для оплаты на основе набора продуктов,
помещенных в корзину…………………………………………………………………………………………………….. 389

6.5.6. Удаление корзины или активного заказа……………………………………………………………… 395

6.5.7. Проверка работы модулей для перевода корзины в предварительный заказ…… 397

6.5.8. Интеграция интернет-магазина с платежной платформой Robokassa………………. 402

6.5.9. Обработка сбоя оплаты заказа пластиковой картой………………………………………….. 406

6.5.10. Обработка успешной оплаты заказа банковской картой…………………………………. 407

6.5.11. Обработка реальной оплаты заказа банковской картой на платежной платформе Robokassa     409

6.6. Проверка работы модулей оплаты предварительного заказа……………………………………… 410

6.7. Модули для показа оплаченных заказов (покупок)………………………………………………………. 414

6.8. Проверка работы модулей для показа оплаченных заказов (покупок)……………………….. 418

6.9. Краткие итоги……………………………………………………………………………………………………………………. 420

Глава 7. Полезные советы……………………………………………………………………. 421

7.1. Показываем на сайте документ PDF……………………………………………………………………………….. 421

7.1.1. Создание документа в формате PDF……………………………………………………………………… 422

7.1.2. Вывод документа формата PDF из представления………………………………………………. 424

7.1.3. Вывод документа формата PDF из шаблона Django…………………………………………… 426

7.1.4. Вывод PDF-документа в формате флеш-анимации……………………………………………… 428

7.2. Переводим страницы сайта на другие языки…………………………………………………………………. 434

7.3. Отправляем с сайта почтовые сообщения……………………………………………………………………… 437

7.3.1. Регистрация в почтовом сервисе Timeweb……………………………………………………………. 438

7.3.2. Программные модули для отправки почтовых сообщений………………………………… 440

7.3.3. Проверка работы модулей отправки почтовых сообщений……………………………….. 443

7.4. Используем скрипты в шаблонах Django……………………………………………………………………….. 445

7.4.1. Скрипты для придания страницам сайта новогоднего стиля…………………………….. 446

7.4.2. Скрипты для анимации кнопок……………………………………………………………………………… 453

7.5. Используем фреймворк PyScript в шаблонах Django…………………………………………………….. 456

7.5.1. PyScript: отображение в шаблоне Django содержимого символьной переменной и списка                457

7.5.2. PyScript: импорт дополнительных библиотек, создание функции
и выполнение обращений к ним………………………………………………………………………………………. 459

7.5.3. PyScript: работа с пакетами NumPy и pandas………………………………………………………. 461

7.5.4. PyScript: работа с внешними библиотеками для обработки и визуализации данных           463

7.6. Используем пакет Brython для создания программ на Python для HTML-страниц……. 466

7.6.1. Brython: вывод на HTML-страницу обычной символьной строки…………………….. 467

7.6.2. Brython: игра «Змейка» (создание окон, функций и обращений к ним)……………… 468

7.7. Откатываем миграцию……………………………………………………………………………………………………… 474

7.8. Краткие итоги……………………………………………………………………………………………………………………. 475

Глава 8. Визуализация данных в Django………………………………………………. 477

8.1. Визуализация данных с библиотекой plotly.py: двумерная графика (2D)…………………… 477

8.1.1. Создание статичных графиков (одна линия)……………………………………………………….. 481

8.1.2. Создание статичных графиков (несколько линий)………………………………………………. 484

8.1.3. Отображение двух графиков в одном окне макета………………………………………………. 487

8.1.4. Отображение четырех графиков в одном окне макета………………………………………… 489

8.1.5. Создание 2D-диаграммы рассеяния……………………………………………………………………… 492

8.1.6. Создание круговой диаграммы……………………………………………………………………………… 495

8.1.7. Создание столбчатой гистограммы………………………………………………………………………. 497

8.1.8. Создание столбчатой гистограммы и сглаживающей кривой……………………………. 500

8.1.9. Создание графиков с тепловой картой…………………………………………………………………. 502

8.1.10. Создание пузырьковой диаграммы…………………………………………………………………….. 505

8.1.11. Пузырьковая диаграмма с цветными маркерами………………………………………………. 507

8.1.12. Пузырьковая диаграмма с масштабируемыми маркерами………………………………. 509

8.1.13. Пузырьковая диаграмма с поясняющим текстом на маркерах………………………… 512

8.1.14. Пузырьковая диаграмма с тепловой картой………………………………………………………. 514

8.1.15. Отображение статичных элементов на географических картах……………………… 516

8.2. Визуализация данных с библиотекой plotly.py: трехмерная графика (3D)…………………. 520

8.2.1. Создание 3D-графика линии по точкам………………………………………………………………… 520

8.2.2. Создание 3D-графика с указанием параметров линии……………………………………….. 522

8.2.3. Создание 3D-графика плавной витой линии………………………………………………………… 525

8.2.4. Создание 3D-графика линии с ключевыми точками……………………………………………. 527

8.2.5. Создание 3D-графика плоской поверхности………………………………………………………… 530

8.2.6. Создание 3D-графика изогнутой поверхности с использованием функций………. 533

8.2.7. Создание 3D-графика изогнутой поверхности с контурами
по вертикальной оси…………………………………………………………………………………………………………. 536

8.2.8. Создание 3D-графика поверхности с контурами по всем осям………………………….. 539

8.2.9. Создание 3D-графика поверхности с указанием параметров сцены и положения камеры 542

8.2.10. Создание 3D-графика поверхности с контурной сеткой…………………………………… 546

8.2.11. Создание 3D-диаграммы рассеяния точек…………………………………………………………. 549

8.3. Визуализация интерактивных графиков с библиотекой plotly.py………………………………… 551

8.3.1. Создание интерактивного 2D-графика со слайдером…………………………………………. 552

8.3.2. Комбинирование интерактивного графика с анимированными
изображениями…………………………………………………………………………………………………………………. 556

8.3.3. Вывод двух интерактивных графиков в одну координатную сетку…………………… 562

8.3.4. Вывод статичных и интерактивных графиков в одну координатную сетку……… 567

8.3.5. Анимация графиков с исчезновением элементов…………………………………………………. 571

8.3.6. Анимация графиков с появлением элементов………………………………………………………. 576

8.3.7. Анимация графиков с использованием фреймов и кнопок………………………………….. 583

8.3.8. Анимация графиков с использованием фреймов, кнопок и слайдера………………… 587

8.3.9. Анимация пузырьковой диаграммы………………………………………………………………………. 591

8.3.10. Анимация объемных 3D-срезов на примере снимков МРТ……………………………….. 598

8.3.11. Географические карты с анимацией данных пользовательских форм……………. 602

8.3.12. Географические карты с анимацией данных кнопками и слайдером……………… 608

8.4. Краткие итоги……………………………………………………………………………………………………………………. 612

Глава 9. Визуализация данных в Django с анимацией на JavaScript…….. 613

9.1. Включение JavaScript в шаблон Django………………………………………………………………………….. 613

9.1.1. Анимация диаграмм формата 2D………………………………………………………………………….. 614

Подключение библиотеки plotly.js………………………………………………………………………… 620

Тег <style>………………………………………………………………………………………………………………. 620

Теги для визуализации объектов…………………………………………………………………………… 620

Тег для кода на языке Java…………………………………………………………………………………….. 621

9.1.2. Анимация трехмерной диаграммы формата 3D…………………………………………………… 625

Подключение библиотеки plotly.js………………………………………………………………………… 631

Тег <style>………………………………………………………………………………………………………………. 631

Теги для визуализации объектов…………………………………………………………………………… 631

Тег для кода на языке Java…………………………………………………………………………………….. 632

9.2. Краткие итоги……………………………………………………………………………………………………………………. 635

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

Приложение 1. Порядок работы с интерактивной цифровой платформой 639

Просмотр карточек с загруженными книгами………………………………………………………………………. 640

Просмотр вкладок цифровой книги………………………………………………………………………………………… 643

Вкладка Текст PDF………………………………………………………………………………………………………….. 645

Вкладка Листинги……………………………………………………………………………………………………………. 646

Вкладка Показ примеров…………………………………………………………………………………………………. 647

Приложение 2. Регистрация интернет-магазина на сайте платформы Robokassa  651

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

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

“Изучаем Vue: основные концепции и практические паттерны для современных и масштабируемых пользовательских интерфейсов”

Изучаем Vue

Книга посвящена созданию с нуля пользовательских интерфейсов и фронтенд-приложений с помощью Vue.js — современной платформы JavaScript. На практических примерах разработчики поэтапно познакомятся с инструментами и библиотеками экосистемы Vue.js и научатся создавать полноценные веб-приложения. Рассматриваются ключевые аспекты работы с Vue.js: создание компонентов, добавление реактивности, управление состоянием с помощью Pinia, настройка системы маршрутизации с использованием Vue Router, а также создание базовых анимационных эффектов. Подробно описана настройка фронтенда с помощью инструмента сборки для управления кодом Vite.js, создание повторно используемых компонентов, передача приложению данных с внешнего сервера, тестирование с использованием Vitest и Playwright. Показано, как управлять потоком приложения, реализовывать статическую и динамическую маршрутизацию, а также интегрировать Vue.js в существующие проекты.

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

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

В книге показано, как:

  • создавать повторно используемые системы компонентов с помощью Vue.js;
  • добавлять реактивность в существующее статическое приложение;
  • настраивать фронтенд с помощью Vite.js — инструмента сборки для управления кодом проекта;
  • создавать интерактивную систему управления состоянием фронтенда с помощью Pinia;
  • подключать к приложению Vue данные с внешнего сервера;
  • управлять потоком приложения с помощью статической и динамической маршрутизации посредством Vue Router;
  • тестировать приложение с помощью Vitest и Playwright.

Книгу “Изучаем Vue: основные концепции и практические паттерны для современных и масштабируемых пользовательских интерфейсов“.

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

Условные обозначения……………………………………………………………………………………………………………… 11

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

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

Глава 1. Добро пожаловать в мир Vue.js!……………………………………………….. 15

Что такое Vue.js?………………………………………………………………………………………………………………………… 15

Преимущества Vue в современной веб-разработке………………………………………………………………… 16

Установка Node.js………………………………………………………………………………………………………………………. 16

NPM………………………………………………………………………………………………………………………………….. 17

Yarn………………………………………………………………………………………………………………………………….. 19

Инструменты разработчика Vue………………………………………………………………………………………………. 20

Инструмент управления сборкой Vite.js………………………………………………………………………………….. 21

Создание нового приложения Vue……………………………………………………………………………………………. 22

Файловая структура проекта……………………………………………………………………………………………………. 23

Резюме…………………………………………………………………………………………………………………………………………. 24

Глава 2. Как работает Vue: основы………………………………………………………… 25

Виртуальный DOM “под капотом”…………………………………………………………………………………………… 25

Проблема обновления компоновки……………………………………………………………………………….. 26

Что такое виртуальный DOM?………………………………………………………………………………………. 27

Как виртуальный DOM работает вместе с Vue……………………………………………………………. 27

Экземпляр приложения Vue и Options API………………………………………………………………………………. 29

Изучаем Options API………………………………………………………………………………………………………………….. 30

Синтаксис шаблонов…………………………………………………………………………………………………………………. 32

Создание локального состояния в свойстве data()…………………………………………………………………. 33

Как работает реактивность в фреймворке Vue……………………………………………………………………….. 36

Двустороннее связывание с помощью v-model……………………………………………………………………….. 38

Использование модификатора v-model.lazy…………………………………………………………………………….. 41

Связывание реактивных данных и передача свойств с помощью v-bind……………………………… 42

Привязка к классу и атрибутам стиля……………………………………………………………………………………… 44

Перебор коллекции с помощью v-for……………………………………………………………………………………….. 47

Перебор свойств объекта……………………………………………………………………………………………….. 50

Уникальная привязка элемента с помощью атрибута key………………………………………….. 51

Обработка событий v-on…………………………………………………………………………………………………………… 52

Использование модификаторов v-on…………………………………………………………………………….. 53

События клавиатуры с помощью модификаторов клавиш………………………………………… 56

Условный рендеринг элементов с помощью v-if, v-else и v-else-if………………………………………….. 57

Условная видимость элементов с помощью v-show………………………………………………………………… 60

Динамическая отрисовка HTML-кода с помощью v-html………………………………………………………. 61

Отображение текста с помощью v-text…………………………………………………………………………………….. 62

Оптимизация рендеринга с помощью v-once и v-memo…………………………………………………………… 62

Глобальная регистрация компонентов……………………………………………………………………………………. 65

Резюме…………………………………………………………………………………………………………………………………………. 66

Глава 3. Создание более сложных компонентов…………………………………….. 67

Структура однофайлового компонента…………………………………………………………………………………… 67

Использование defineComponent() для поддержки TypeScript………………………………………………. 70

Хуки жизненного цикла компонента………………………………………………………………………………………… 71

setup…………………………………………………………………………………………………………………………………. 73

beforeCreate…………………………………………………………………………………………………………………….. 75

created……………………………………………………………………………………………………………………………… 75

beforeMount…………………………………………………………………………………………………………………….. 75

mounted……………………………………………………………………………………………………………………………. 75

beforeUpdate……………………………………………………………………………………………………………………. 76

updated…………………………………………………………………………………………………………………………….. 76

beforeUnmount…………………………………………………………………………………………………………………. 76

unmounted………………………………………………………………………………………………………………………… 76

Методы……………………………………………………………………………………………………………………………………….. 80

Вычисляемые свойства……………………………………………………………………………………………………………… 82

Наблюдатели……………………………………………………………………………………………………………………………… 84

Наблюдение за изменениями вложенных свойств………………………………………………………. 87

Использование метода this.$watch()……………………………………………………………………………… 89

Возможности слотов………………………………………………………………………………………………………………….. 91

Именованные слоты в теге template с директивой v-slot………………………………………………………… 95

Использование ссылок ref…………………………………………………………………………………………………………. 98

Общая конфигурация компонентов с помощью миксинов…………………………………………………… 100

Локальные стили в компонентах……………………………………………………………………………………………. 104

Применение локальных CSS-стилей к дочернему компоненту………………………………… 107

Применение локальных стилей к содержимому слота……………………………………………… 108

Использование данных компонента в стиле с помощью псевдокласса v-bind()…….. 108

Определение стилей компонентов с помощью CSS-модулей………………………………………………. 110

Резюме………………………………………………………………………………………………………………………………………. 112

Глава 4. Взаимодействие компонентов…………………………………………………. 113

Вложенные компоненты и поток данных в Vue……………………………………………………………………. 113

Использование props для передачи данных в дочерние компоненты……………………… 114

Объявление входных параметров с валидацией и значениями по умолчанию……… 117

Объявление входных параметров с проверкой пользовательских типов……………….. 119

Объявление входных параметров с помощью defineProps()и withDefaults()………….. 122

Взаимодействие компонентов через пользовательские события………………………………………… 123

Определение пользовательских событий с помощью defineEmits()……………………………………. 127

Взаимодействие компонентов с помощью provide/inject…………………………………………………….. 129

Использование provide для передачи данных…………………………………………………………… 129

Использование inject для получения данных…………………………………………………………….. 130

Teleport API………………………………………………………………………………………………………………………………. 131

Реализация модального окна с помощью Teleport и элемента <dialog>……………….. 133

Проблема рендеринга при использовании Teleport………………………………………………….. 140

Резюме………………………………………………………………………………………………………………………………………. 141

Глава 5. Composition API………………………………………………………………………. 143

Создание компонентов в Composition API…………………………………………………………………………….. 143

Управление данными с помощью ref() и reactive()……………………………………………………………….. 144

Использование ref()………………………………………………………………………………………………………. 144

Использование reactive()……………………………………………………………………………………………… 149

Хуки жизненного цикла в Composition API……………………………………………………………………………. 151

Наблюдатели в Composition API……………………………………………………………………………………………. 154

Использование computed()………………………………………………………………………………………………………. 157

Создание многократно используемых компосаблов……………………………………………………………. 159

Резюме………………………………………………………………………………………………………………………………………. 163

Глава 6. Загрузка внешних данных……………………………………………………… 165

Что такое Axios?………………………………………………………………………………………………………………………. 165

Установка Axios……………………………………………………………………………………………………………………….. 166

Загрузка данных с помощью хуков жизненного цикла и Axios…………………………………………… 166

Проблема асинхронных запросов в режиме выполнения……………………………………………………. 170

Создание повторно используемого компонента для выполнения запросов………………………. 173

Хранение данных на стороне браузера………………………………………………………………………………… 176

Резюме………………………………………………………………………………………………………………………………………. 177

Глава 7. Продвинутый рендеринг, динамические компоненты
и плагины…………………………………………………………………………………………….. 179

Функция рендеринга и JSX……………………………………………………………………………………………………… 179

Использование функции рендеринга………………………………………………………………………….. 179

Использование функции h для создания VNode………………………………………………………… 180

JavaScript XML в функции рендеринга……………………………………………………………………….. 182

Функциональный компонент………………………………………………………………………………………………….. 183

Определение props и emits для функционального компонента……………………………………………. 185

Пользовательская функциональность глобального уровня с помощью плагинов Vue…….. 185

Динамический рендеринг с помощью тега <component>……………………………………………………. 188

Кеширование экземпляра неактивного компонента с помощью <keep-alive>…………………… 189

Резюме………………………………………………………………………………………………………………………………………. 191

Глава 8. Маршрутизация……………………………………………………………………… 193

Что такое маршрутизация?…………………………………………………………………………………………………….. 193

Использование Vue Router………………………………………………………………………………………………………. 194

Установка Vue Router…………………………………………………………………………………………………… 194

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

Создание экземпляра маршрутизатора……………………………………………………………………… 199

Подключение экземпляра маршрутизатора к приложению Vue……………………………… 200

Рендеринг текущей страницы с помощью RouterView………………………………………………. 201

Панель навигации с помощью компонента RouterLink…………………………………………….. 202

Передача данных между маршрутами………………………………………………………………………………….. 204

Передача параметров маршрута с помощью props……………………………………………………………… 208

Навигационные хуки……………………………………………………………………………………………………………….. 209

Глобальные навигационные хуки………………………………………………………………………………. 209

Навигационные хуки уровня маршрута…………………………………………………………………….. 210

Навигационные хуки уровня компонента………………………………………………………………….. 211

Создание вложенных маршрутов…………………………………………………………………………………………… 213

Создание динамических маршрутов……………………………………………………………………………………… 215

Переход назад и вперед с помощью экземпляра маршрутизатора…………………………………….. 218

Обработка неопределенных маршрутов……………………………………………………………………………….. 219

Резюме………………………………………………………………………………………………………………………………………. 221

Глава 9. Управление состояниями с помощью Pinia…………………………….. 223

Что такое управление состояниями в Vue?……………………………………………………………………………. 223

Что такое Pinia………………………………………………………………………………………………………………………….. 225

Создание хранилища pizzas для Pizza House………………………………………………………………………… 226

Создание хранилища cart для Pizza House……………………………………………………………………………. 230

Использование хранилища cart в компоненте………………………………………………………………………. 231

Добавление элементов в корзину из галереи………………………………………………………………………… 232

Отображение элементов корзины с помощью действий………………………………………………………. 235

Удаление товаров из хранилища cart……………………………………………………………………………………. 239

Модульное тестирование хранилищ Pinia…………………………………………………………………………….. 241

Подписка на изменения хранилища и добавление побочных эффектов…………………………….. 241

Резюме………………………………………………………………………………………………………………………………………. 244

Глава 10. Переходы и анимация в Vue…………………………………………………. 245

Что такое CSS-переходы и CSS-анимация?…………………………………………………………………………… 245

Компонент transition в Vue……………………………………………………………………………………………………… 246

Использование атрибутов с пользовательскими классами переходов……………………. 249

Эффект перехода при первом рендеринге с помощью appear………………………………….. 250

Создание перехода для группы элементов……………………………………………………………………………. 251

Создание переходов для маршрутов……………………………………………………………………………………… 252

Использование событий перехода для управления анимацией………………………………………….. 253

Резюме………………………………………………………………………………………………………………………………………. 255

Глава 11. Тестирование в Vue………………………………………………………………. 257

Общие сведения о модульном и сквозном тестировании……………………………………………………… 257

Vitest как инструмент для модульного тестирования…………………………………………………………… 259

Настройка Vitest с помощью параметров и файла конфигурации……………………………………… 259

Создание вашего первого теста……………………………………………………………………………………………… 261

Тестирование компосаблов, не использующих хуки жизненного цикла……………………………. 266

Тестирование компосаблов с хуками жизненного цикла…………………………………………………….. 269

Тестирование компонентов с помощью Vue Test Utils………………………………………………………….. 274

Тестирование событий компонента……………………………………………………………………………………….. 277

Пользовательский интерфейс Vitest……………………………………………………………………………………….. 279

Использование Vitest с инструментами для оценки покрытия кода……………………………………. 280

Сквозное тестирование с помощью PlaywrightJS………………………………………………………………….. 284

Отладка сквозных тестов с помощью расширения Playwright Test для VSCode………………… 291

Резюме………………………………………………………………………………………………………………………………………. 293

Глава 12. Непрерывная интеграция и непрерывное развертывание
Vue-приложений…………………………………………………………………………………… 295

CI/CD в разработке программного обеспечения………………………………………………………………….. 295

Непрерывная интеграция…………………………………………………………………………………………….. 296

Непрерывная доставка………………………………………………………………………………………………… 296

Непрерывное развертывание………………………………………………………………………………………. 296

Конвейер CI/CD с помощью GitHub Actions………………………………………………………………………….. 297

Непрерывное развертывание с помощью Netlify………………………………………………………………….. 301

Развертывание с помощью Netlify CLI…………………………………………………………………………………… 303

Резюме………………………………………………………………………………………………………………………………………. 304

Глава 13. Рендеринг на стороне сервера в фреймворке Vue………………….. 305

Рендеринг на стороне клиента в Vue……………………………………………………………………………………… 305

Рендеринг на стороне сервера (SSR)……………………………………………………………………………………… 306

Рендеринг на стороне сервера с помощью Nuxt.js……………………………………………………………….. 311

Генератор статических сайтов (SSG)…………………………………………………………………………………….. 319

Напоследок………………………………………………………………………………………………………………………………. 320

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

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

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