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

Встречайте: “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

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

Новинка: “Мастер веб-разработки на 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Постолит

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

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

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

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

Описание

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

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

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

Python и Django — команда мечты!

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

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

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

Внимание

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

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

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

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

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

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

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

Что нового в Django 4.1 и новой книге?……………………………………………………………………………………. 21

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

4.7.3. Написание своих валидаторов………………………………………………………………………………….. 133

4.7.4. Валидация модели………………………………………………………………………………………………………. 134

4.8. Создание моделей на основе существующих баз данных……………………………………………. 136

Глава 5. Миграции……………………………………………………………………………….. 137

5.1. Генерирование миграций…………………………………………………………………………………………………. 137

5.2. Модули миграций……………………………………………………………………………………………………………… 139

5.3. Выполнение миграций……………………………………………………………………………………………………… 139

5.4. Вывод списка миграций……………………………………………………………………………………………………. 141

5.5. Оптимизация миграций…………………………………………………………………………………………………….. 141

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

7.1.1. Получение значений из полей разных типов……………………………………………………………. 161

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

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

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

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

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

7.3.4. Поиск одной записи…………………………………………………………………………………………………….. 167

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

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

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

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

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

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

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

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

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

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

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

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

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

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

7.6. Вычисляемые поля……………………………………………………………………………………………………………. 186

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

7.7.1. Функции СУБД……………………………………………………………………………………………………………. 187

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

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

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

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

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

7.7.3. Вложенные запросы……………………………………………………………………………………………………. 196

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

9.7.2. Отправка файлов…………………………………………………………………………………………………………. 227

9.7.3. Отправка данных в формате JSON…………………………………………………………………………….. 227

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

17.4.4. Дополнительные команды captcha_clean и captcha_create_pool………………………… 414

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

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

18.1. Дополнительные инструменты для поддержки PostgreSQL………………………………………… 416

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

18.1.1.1. Поля, специфические для PostgreSQL…………………………………………………………… 416

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

18.1.7.1. Поля форм, специфические для PostgreSQL…………………………………………………. 447

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Глава 21. Разграничение доступа: расширенные инструменты и дополнительная библиотека  498

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

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

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

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

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

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

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

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

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

21.5. Библиотека Python Social Auth: регистрация и вход через социальные сети……………. 505

21.5.1. Создание приложения «ВКонтакте»……………………………………………………………………….. 505

21.5.2. Установка и настройка Python Social Auth…………………………………………………………….. 506

21.5.3. Использование Python Social Auth…………………………………………………………………………… 508

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

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

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

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

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

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

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

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

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

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

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

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

23.1. Cookie………………………………………………………………………………………………………………………………. 521

23.2. Сессии………………………………………………………………………………………………………………………………. 524

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

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

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

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

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

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

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

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

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

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

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

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

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

24.1.2. Явная привязка обработчиков к сигналам……………………………………………………………… 538

24.1.3. Неявная привязка обработчиков к сигналам………………………………………………………….. 539

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

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

24.3. Объявление своих сигналов…………………………………………………………………………………………… 545

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

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

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

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

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

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

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

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

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

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

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

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

Глава 26. Кеширование………………………………………………………………………… 557

26.1. Кеширование на стороне сервера…………………………………………………………………………………. 557

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

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

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

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

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

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

26.1.2.3. Управление кешированием…………………………………………………………………………… 564

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

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

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

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

26.2. Кеширование на стороне клиента…………………………………………………………………………………. 570

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

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

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

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

26.2.2.3. Запрет кеширования……………………………………………………………………………………… 573

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

Глава 27. Локализация…………………………………………………………………………. 576

27.1. Локализация строк………………………………………………………………………………………………………….. 576

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

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

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

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

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

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

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

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

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

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

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

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

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

27.1.5. Настройка локализации строк………………………………………………………………………………… 593

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

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

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

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

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

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

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

28.3. Редакторы моделей…………………………………………………………………………………………………………. 603

28.3.1. Параметры списка записей………………………………………………………………………………………. 603

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

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

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

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

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

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

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

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

28.4. Встроенные редакторы………………………………………………………………………………………………….. 622

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

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

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

28.5. Действия…………………………………………………………………………………………………………………………… 625

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

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

29.2. Введение в Django REST framework. Вывод данных…………………………………………………… 631

29.2.1. Сериализаторы…………………………………………………………………………………………………………. 631

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

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

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

29.3. Ввод и правка данных……………………………………………………………………………………………………. 637

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

29.3.2. Парсеры веб-форм…………………………………………………………………………………………………….. 641

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

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

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

29.5. Метаконтроллеры…………………………………………………………………………………………………………… 644

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

29.6.1. Третий принцип REST: данные клиента хранятся на стороне клиента………………. 646

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

Глава 30. Средства журналирования……………………………………………………. 649

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

30.2. Объект сообщения…………………………………………………………………………………………………………… 650

30.3. Форматировщики……………………………………………………………………………………………………………. 651

30.4. Фильтры…………………………………………………………………………………………………………………………… 652

30.5. Обработчики……………………………………………………………………………………………………………………. 653

30.6. Регистраторы…………………………………………………………………………………………………………………… 658

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

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

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

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

31.1.2. Указание настроек эксплуатационного режима……………………………………………………. 664

31.1.3. Удаление ненужных данных……………………………………………………………………………………. 666

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

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

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

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

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

31.2.1.2. Запуск и остановка Uvicorn………………………………………………………………………….. 674

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

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

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

32.1. План веб-сайта………………………………………………………………………………………………………………… 679

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

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

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

32.3. Базовый шаблон……………………………………………………………………………………………………………… 681

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

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

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

33.1. Модель пользователя……………………………………………………………………………………………………… 693

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

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

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

33.2.3. Реализация выхода…………………………………………………………………………………………………… 698

33.3. Веб-страницы правки личных данных пользователя………………………………………………….. 699

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

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

33.4. Веб-страницы регистрации и активации пользователей…………………………………………….. 703

33.4.1. Веб-страницы регистрации нового пользователя………………………………………………….. 703

33.4.1.1. Форма для занесения сведений о новом пользователе………………………………. 703

33.4.1.2. Средства для регистрации пользователя……………………………………………………. 705

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

33.4.2. Веб-страницы активации пользователя………………………………………………………………….. 709

33.5. Веб-страница удаления пользователя………………………………………………………………………….. 711

33.6. Инструменты для администрирования пользователей……………………………………………….. 713

Глава 34. Рубрики………………………………………………………………………………… 715

34.1. Модели рубрик……………………………………………………………………………………………………………….. 715

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

34.1.2. Модель надрубрик……………………………………………………………………………………………………. 716

34.1.3. Модель подрубрик……………………………………………………………………………………………………. 717

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

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

Глава 35. Объявления………………………………………………………………………….. 722

35.1. Подготовка к обработке выгруженных файлов……………………………………………………………. 722

35.2. Модели объявлений и дополнительных иллюстраций……………………………………………….. 723

35.2.1. Модель самих объявлений……………………………………………………………………………………….. 723

35.2.2. Модель дополнительных иллюстраций…………………………………………………………………. 726

35.2.3. Реализация удаления объявлений в модели пользователя……………………………………. 726

35.3. Инструменты для администрирования объявлений…………………………………………………….. 727

35.4. Вывод объявлений………………………………………………………………………………………………………….. 727

35.4.1. Вывод списка объявлений………………………………………………………………………………………… 728

35.4.1.1. Форма поиска и контроллер списка объявлений……………………………………….. 728

35.4.1.2. Реализация корректного возврата……………………………………………………………….. 729

35.4.1.3. Шаблон веб-страницы списка объявлений…………………………………………………. 731

35.4.2. Веб-страница сведений о выбранном объявлении………………………………………………… 734

35.4.3. Вывод последних 10 объявлений на главной веб-странице…………………………………. 738

35.5. Работа с объявлениями…………………………………………………………………………………………………… 738

35.5.1. Вывод объявлений, оставленных текущим пользователем…………………………………… 738

35.5.2. Добавление, правка и удаление объявлений………………………………………………………….. 739

Глава 36. Комментарии………………………………………………………………………… 743

36.1. Подготовка к выводу CAPTCHA……………………………………………………………………………………. 743

36.2. Модель комментария……………………………………………………………………………………………………… 744

36.3. Вывод и добавление комментариев………………………………………………………………………………. 745

36.4. Отправка уведомлений о новых комментариях…………………………………………………………… 748

Глава 37. Веб-служба REST………………………………………………………………….. 750

37.1. Веб-служба……………………………………………………………………………………………………………………… 750

37.1.1. Подготовка к разработке веб-службы…………………………………………………………………….. 750

37.1.2. Список объявлений…………………………………………………………………………………………………… 751

37.1.3. Сведения о выбранном объявлении………………………………………………………………………… 752

37.1.4. Вывод и добавление комментариев………………………………………………………………………… 753

37.2. Тестовый фронтенд…………………………………………………………………………………………………………. 755

37.2.1. Введение в Angular……………………………………………………………………………………………………. 755

37.2.2. Подготовка к разработке фронтенда………………………………………………………………………. 756

37.2.3. Метамодуль приложения AppModule. Маршрутизация в Angular……………………….. 757

37.2.4. Компонент приложения AppComponent………………………………………………………………….. 761

37.2.5. Служба BbService. Внедрение зависимостей. Объекты-обещания………………………. 762

37.2.6. Компонент списка объявлений BbListComponent. Директивы. Фильтры. Связывание данных            766

37.2.7. Компонент сведений об объявлении BbDetailComponent.
Двустороннее связывание данных………………………………………………………………………………………. 770

Заключение………………………………………………………………………………………….. 775

Приложение. Описание электронного архива………………………………………. 777

Предметный указатель…………………………………………………………………………. 779

 

Дронов Владимир Александрович, профессиональный программист, писатель и журналист, работает с компьютерами с 1987 года. Автор более 30 популярных компьютерных книг, в том числе «Django 2.1. Практика создания веб-сайтов на Python», “HTML, JavaScript, PHP и MySQL. Джентльменский набор Web-мастера“, «Python 3. Самое необходимое», «Python 3 и PyQt 5. Разработка приложений», “Laravel. Быстрая разработка современных динамических Web-сайтов на PHP, MySQL, HTML и CSS“, “Angular 4. Быстрая разработка сверхдинамических Web-сайтов на TypeScript и PHP” и книг по продуктам Adobe Flash и Adobe Dreamweaver различных версий. Его статьи публикуются в журналах “Мир ПК” и “ИнтерФейс” (Израиль) и интернет-порталах “IZ City” и “TheVista.ru”.