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

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

Добавить комментарий