
Книга посвящена разработке веб-сайтов на языке Python с применением веб-фреймворка Django 5.1. Представлены новинки Django и дано наиболее полное описание его инструментов и средств: моделей, миграций, контролеров, шаблонов, обработки пользовательского ввода, разграничения доступа, посредников, сигналов, отправки электронной почты, локализации, кеширования, работы с базами данных PostgreSQL, поддержке нескольких веб-сайтов, простых страниц, статичных перенаправлений, жетонной аутентификации и др. Описаны полезные дополнительные библиотеки, реализующие обработку BBCode, CAPTCHA, вывод графических миниатюр, интеграцию с Bootstrap. Рассказано о программировании веб-служб REST, настройке встроенного административного веб-сайта и публикации готового сайта посредством веб-серверов Uvicorn и Apache HTTP Server. Подробно описано создание полнофункционального веб-сайта — электронной доски объявлений.
Электронное приложение-архив на сайте издательства содержит коды всех примеров.
Для веб-программистов
Python и Django — веб-разработка на современном уровне
Что такое веб-фреймворк?
Фреймворк (от англ. framework — каркас) — это программная библиотека, реализующая бОльшую часть типовой функциональности разрабатываемого продукта. То есть в полном смысле слова каркас, на который разработчик конкретного продукта «навешивает» свои узлы, механизмы и детали декора.
Веб-фреймворк — это фреймворк для программирования веб-сайтов. Как правило, он обеспечивает следующую типовую функциональность:
- взаимодействие с базой данных — посредством единых инструментов, независимых от конкретной СУБД;
- обработка клиентских запросов — в частности, определение, какая страница запрашивается;
- генерирование запрашиваемых веб-страниц на основе шаблонов;
- разграничение доступа — допуск к закрытым страницам только зарегистрированных пользователей и только после выполнения ими входа;
- обработка данных, занесенных посетителями в веб-формы, — в частности, проверка их на корректность;
- получение и сохранение файлов, выгруженных пользователями;
- рассылка электронных писем;
- кеширование сгенерированных страниц на стороне сервера — для повышения производительности;
- локализация — перевод сайта на другие языки.
Внимание
Автор предполагает, что читатели этой книги знакомы с языками HTML, CSS, JavaScript, Python, принципами работы СУБД и имеют базовые навыки в веб-разработке. В книге все это описываться не будет.
Книгу “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








