Предисловие…………………………………………………………………………………………… 19
Что такое веб-фреймворк?…………………………………………………………………………………………………………. 19
Почему Django?………………………………………………………………………………………………………………………….. 20
Что нового в Django 4.1 и новой книге?……………………………………………………………………………………. 21
Использованные программные продукты……………………………………………………………………………….. 21
Типографские соглашения………………………………………………………………………………………………………… 22
Часть I. Вводный курс…………………………………………………………………… 25
Глава 1. Основные понятия Django. Вывод данных………………………………. 27
1.1. Установка фреймворка……………………………………………………………………………………………………….. 27
1.2. Проект Django……………………………………………………………………………………………………………………… 28
1.3. Отладочный веб-сервер Django…………………………………………………………………………………………. 29
1.4. Приложения…………………………………………………………………………………………………………………………. 30
1.5. Контроллеры……………………………………………………………………………………………………………………….. 32
1.6. Маршруты и маршрутизатор…………………………………………………………………………………………….. 33
1.7. Модели…………………………………………………………………………………………………………………………………. 36
1.8. Миграции…………………………………………………………………………………………………………………………….. 38
1.9. Консоль Django…………………………………………………………………………………………………………………… 40
1.10. Работа с моделями……………………………………………………………………………………………………………. 40
1.11. Шаблоны……………………………………………………………………………………………………………………………. 44
1.12. Контекст шаблона, рендеринг и сокращения…………………………………………………………………. 46
1.13. Административный веб-сайт Django………………………………………………………………………………. 47
1.14. Параметры полей и моделей……………………………………………………………………………………………. 52
1.15. Редактор модели……………………………………………………………………………………………………………….. 53
Глава 2. Связи. Ввод данных. Статические файлы………………………………… 56
2.1. Связи между моделями……………………………………………………………………………………………………….. 56
2.2. Строковое представление модели…………………………………………………………………………………….. 58
2.3. URL-параметры и параметризованные запросы……………………………………………………………… 59
2.4. Обратное разрешение интернет-адресов………………………………………………………………………….. 63
2.5. Формы, связанные с моделями…………………………………………………………………………………………… 65
2.6. Контроллеры-классы………………………………………………………………………………………………………….. 65
2.7. Наследование шаблонов……………………………………………………………………………………………………. 68
2.8. Статические файлы…………………………………………………………………………………………………………….. 71
Часть II. Базовые инструменты Django………………………………… 75
Глава 3. Создание и настройка проекта…………………………………………………. 77
3.1. Подготовка к работе…………………………………………………………………………………………………………… 77
3.2. Создание проекта Django…………………………………………………………………………………………………… 79
3.3. Настройки проекта……………………………………………………………………………………………………………… 79
3.3.1. Основные настройки…………………………………………………………………………………………………….. 79
3.3.2. Параметры баз данных………………………………………………………………………………………………… 80
3.3.3. Список зарегистрированных приложений………………………………………………………………….. 83
3.3.4. Список зарегистрированных посредников…………………………………………………………………. 84
3.3.5. Языковые настройки…………………………………………………………………………………………………….. 85
3.3.6. Доступ к настройкам проекта из программного кода……………………………………………….. 88
3.3.7. Создание собственных настроек проекта…………………………………………………………………… 88
3.4. Создание, настройка и регистрация приложений……………………………………………………………. 89
3.4.1. Создание приложений………………………………………………………………………………………………….. 89
3.4.2. Настройки приложений………………………………………………………………………………………………… 89
3.4.3. Регистрация приложений в проекте…………………………………………………………………………….. 90
3.5. Средства отладки……………………………………………………………………………………………………………….. 91
3.5.1. Отладочный веб-сервер Django…………………………………………………………………………………… 91
3.5.2. Веб-страница сообщения об ошибке…………………………………………………………………………… 92
3.6. Работа с несколькими базами данных………………………………………………………………………………. 94
3.6.1. Регистрация используемых баз данных……………………………………………………………………… 94
3.6.2. Диспетчеризация данных…………………………………………………………………………………………….. 95
3.6.2.1. Автоматическая диспетчеризация данных……………………………………………………… 95
3.6.2.2. Указание базы данных в административных командах………………………………… 98
3.6.2.3. Ручная диспетчеризация данных…………………………………………………………………….. 99
Глава 4. Модели: базовые инструменты……………………………………………….. 100
4.1. Объявление моделей…………………………………………………………………………………………………………. 100
4.2. Объявление полей модели………………………………………………………………………………………………… 101
4.2.1. Параметры, поддерживаемые полями всех типов……………………………………………………. 101
4.2.2. Классы полей моделей……………………………………………………………………………………………….. 103
4.2.3. Создание полей со списком……………………………………………………………………………………….. 107
4.3. Создание связей между моделями…………………………………………………………………………………… 110
4.3.1. Связь «один-со-многими»……………………………………………………………………………………………. 110
4.3.2. Связь «один-с-одним»…………………………………………………………………………………………………. 114
4.3.3. Связь «многие-со-многими»………………………………………………………………………………………… 115
4.4. Параметры самой модели………………………………………………………………………………………………… 117
4.4.1. Получение доступа к параметрам модели из программного кода…………………………. 124
4.5. Интернет-адрес модели и его формирование…………………………………………………………………. 124
4.6. Методы модели…………………………………………………………………………………………………………………. 125
4.7. Валидация модели. Валидаторы…………………………………………………………………………………….. 127
4.7.1. Стандартные валидаторы Django…………………………………………………………………………….. 127
4.7.2. Вывод собственных сообщений об ошибках……………………………………………………………. 131
4.7.3. Написание своих валидаторов………………………………………………………………………………….. 133
4.7.4. Валидация модели………………………………………………………………………………………………………. 134
4.8. Создание моделей на основе существующих баз данных……………………………………………. 136
Глава 5. Миграции……………………………………………………………………………….. 137
5.1. Генерирование миграций…………………………………………………………………………………………………. 137
5.2. Модули миграций……………………………………………………………………………………………………………… 139
5.3. Выполнение миграций……………………………………………………………………………………………………… 139
5.4. Вывод списка миграций……………………………………………………………………………………………………. 141
5.5. Оптимизация миграций…………………………………………………………………………………………………….. 141
5.6. Слияние миграций…………………………………………………………………………………………………………….. 142
5.7. Очистка моделей……………………………………………………………………………………………………………….. 143
5.8. Отмена миграций………………………………………………………………………………………………………………. 144
Глава 6. Запись данных……………………………………………………………………….. 145
6.1. Правка записей………………………………………………………………………………………………………………….. 145
6.2. Создание записей……………………………………………………………………………………………………………… 146
6.3. Занесение значений в поля разных типов………………………………………………………………………. 147
6.4. Сохранение записей…………………………………………………………………………………………………………. 149
6.4.1. Сохранение копий записей в разных базах данных………………………………………………… 150
6.5. Удаление записей……………………………………………………………………………………………………………… 151
6.6. Обработка связанных записей…………………………………………………………………………………………. 151
6.6.1. Обработка связи «один-со-многими»………………………………………………………………………… 152
6.6.2. Обработка связи «один-с-одним»………………………………………………………………………………. 153
6.6.3. Обработка связи «многие-со-многими»…………………………………………………………………….. 154
6.7. Произвольное переупорядочивание записей…………………………………………………………………. 156
6.8. Массовые добавление, правка и удаление записей………………………………………………………. 156
6.9. Выполнение валидации модели………………………………………………………………………………………. 159
6.10. Асинхронная запись данных…………………………………………………………………………………………. 160
Глава 7. Выборка данных…………………………………………………………………….. 161
7.1. Извлечение значений из полей записи…………………………………………………………………………….. 161
7.1.1. Получение значений из полей разных типов……………………………………………………………. 161
7.2. Доступ к связанным записям……………………………………………………………………………………………. 162
7.3. Выборка записей………………………………………………………………………………………………………………. 164
7.3.1. Выборка всех записей………………………………………………………………………………………………… 164
7.3.2. Извлечение одной записи…………………………………………………………………………………………… 165
7.3.3. Получение числа записей в наборе…………………………………………………………………………… 166
7.3.4. Поиск одной записи…………………………………………………………………………………………………….. 167
7.3.5. Фильтрация записей……………………………………………………………………………………………………. 168
7.3.6. Написание условий фильтрации……………………………………………………………………………….. 169
7.3.6.1. Написание условий фильтрации по значениям полей связанных записей… 172
7.3.6.2. Написание условий фильтрации по значениям полей типа JSON………………. 173
7.3.6.3. Сравнение со значениями других полей. Функциональные выражения……. 175
7.3.6.4. Сложные условия фильтрации. Выражения сравнения……………………………….. 176
7.3.7. Выборка уникальных записей…………………………………………………………………………………… 177
7.3.8. Выборка указанного числа записей………………………………………………………………………….. 178
7.3.9. Экономная выборка записей……………………………………………………………………………………… 178
7.4. Сортировка записей………………………………………………………………………………………………………….. 179
7.5. Агрегатные вычисления……………………………………………………………………………………………………. 181
7.5.1. Агрегатные вычисления по всем записям набора……………………………………………………. 181
7.5.2. Агрегатные вычисления по связанным записям……………………………………………………….. 182
7.5.3. Агрегатные функции…………………………………………………………………………………………………… 184
7.6. Вычисляемые поля……………………………………………………………………………………………………………. 186
7.7. Функциональные выражения: расширенные инструменты………………………………………….. 187
7.7.1. Функции СУБД……………………………………………………………………………………………………………. 187
7.7.1.1. Функции для работы со строками………………………………………………………………….. 187
7.7.1.2. Функции для работы с числами……………………………………………………………………… 190
7.7.1.3. Функции для работы с датой и временем……………………………………………………… 192
7.7.1.4. Функции для сравнения и преобразования значений…………………………………… 193
7.7.2. Условные выражения СУБД………………………………………………………………………………………. 195
7.7.3. Вложенные запросы……………………………………………………………………………………………………. 196
7.8. Объединение наборов записей………………………………………………………………………………………… 198
7.9. Извлечение значений только из заданных полей…………………………………………………………… 198
7.10. Указание базы данных для выборки записей………………………………………………………………. 201
7.11. Асинхронная выборка данных………………………………………………………………………………………. 201
Глава 8. Маршрутизация……………………………………………………………………… 203
8.1. Как работает маршрутизатор?……………………………………………………………………………………….. 203
8.1.1. Списки маршрутов уровня проекта и уровня приложения……………………………………… 204
8.2. Объявление маршрутов……………………………………………………………………………………………………. 205
8.3. Передача данных в контроллеры……………………………………………………………………………………. 207
8.4. Именованные маршруты………………………………………………………………………………………………….. 208
8.5. Имена приложений……………………………………………………………………………………………………………. 208
8.6. Псевдонимы приложений…………………………………………………………………………………………………. 209
8.7. Указание шаблонных путей в виде регулярных выражений………………………………………… 210
8.8. Настройки маршрутизатора……………………………………………………………………………………………. 211
Глава 9. Контроллеры-функции…………………………………………………………… 212
9.1. Написание контроллеров-функций…………………………………………………………………………………. 212
9.1.1. Контроллеры, выполняющие одну задачу……………………………………………………………….. 213
9.1.2. Контроллеры, выполняющие несколько задач………………………………………………………… 214
9.2. Получение сведений о запросе………………………………………………………………………………………… 215
9.3. Формирование ответа………………………………………………………………………………………………………. 218
9.3.1. Низкоуровневые средства для формирования ответа……………………………………………… 218
9.3.2. Формирование ответа на основе шаблона……………………………………………………………….. 220
9.3.3. Класс TemplateResponse: отложенный рендеринг шаблонов…………………………………. 221
9.4. Перенаправление………………………………………………………………………………………………………………. 222
9.5. Обратное разрешение интернет-адресов……………………………………………………………………….. 223
9.6. Уведомление об ошибках и особых ситуациях……………………………………………………………… 224
9.7. Специальные ответы………………………………………………………………………………………………………… 226
9.7.1. Потоковый ответ…………………………………………………………………………………………………………. 226
9.7.2. Отправка файлов…………………………………………………………………………………………………………. 227
9.7.3. Отправка данных в формате JSON…………………………………………………………………………….. 227
9.8. Сокращения Django………………………………………………………………………………………………………….. 228
9.9. Программное разрешение интернет-адресов…………………………………………………………………. 229
9.10. Дополнительные настройки контроллеров………………………………………………………………….. 231
9.11. Асинхронные контроллеры-функции……………………………………………………………………………. 232
Глава 10. Контроллеры-классы……………………………………………………………. 235
10.1. Введение в контроллеры-классы…………………………………………………………………………………… 235
10.2. Базовые контроллеры-классы……………………………………………………………………………………….. 236
10.2.1. Контроллер View: диспетчеризация по HTTP-методу…………………………………………… 236
10.2.2. Примесь ContextMixin: создание контекста шаблона…………………………………………… 238
10.2.3. Примесь TemplateResponseMixin: рендеринг шаблона………………………………………….. 238
10.2.4. Контроллер TemplateView: все вместе…………………………………………………………………….. 239
10.3. Классы, выводящие одну запись…………………………………………………………………………………… 240
10.3.1. Примесь SingleObjectMixin: поиск записи………………………………………………………………. 240
10.3.2. Примесь SingleObjectTemplateResponseMixin: рендеринг шаблона
на основе найденной записи………………………………………………………………………………………………… 241
10.3.3. Контроллер DetailView: все вместе…………………………………………………………………………. 242
10.4. Классы, выводящие наборы записей…………………………………………………………………………….. 243
10.4.1. Примесь MultipleObjectMixin: извлечение набора записей………………………………….. 243
10.4.2. Примесь MultipleObjectTemplateResponseMixin: рендеринг шаблона
на основе набора записей……………………………………………………………………………………………………. 246
10.4.3. Контроллер ListView: все вместе……………………………………………………………………………… 246
10.5. Классы, работающие с формами…………………………………………………………………………………… 247
10.5.1. Классы для вывода и валидации форм…………………………………………………………………… 247
10.5.1.1. Примесь FormMixin: создание формы…………………………………………………………. 247
10.5.1.2. Контроллер ProcessFormView: вывод и обработка формы……………………….. 249
10.5.1.3. Контроллер-класс FormView: создание, вывод и обработка формы………… 249
10.5.2. Классы для добавления, правки и удаления записей……………………………………………. 250
10.5.2.1. Примесь ModelFormMixin: создание формы, связанной с моделью…………. 251
10.5.2.2. Контроллер CreateView: создание новой записи……………………………………….. 252
10.5.2.3. Контроллер UpdateView: исправление записи…………………………………………… 252
10.5.2.4. Примесь DeletionMixin: удаление записи……………………………………………………. 253
10.5.2.5. Контроллер DeleteView: удаление записи с подтверждением………………….. 254
10.6. Классы для вывода хронологических списков…………………………………………………………….. 256
10.6.1. Вывод последних записей………………………………………………………………………………………… 256
10.6.1.1. Примесь DateMixin: фильтрация записей по дате………………………………………. 256
10.6.1.2. Контроллер BaseDateListView: базовый класс…………………………………………… 256
10.6.1.3. Контроллер ArchiveIndexView: вывод последних записей………………………… 257
10.6.2. Вывод записей по годам…………………………………………………………………………………………… 258
10.6.2.1. Примесь YearMixin: извлечение года…………………………………………………………… 258
10.6.2.2. Контроллер YearArchiveView: вывод записей за год………………………………….. 259
10.6.3. Вывод записей по месяцам………………………………………………………………………………………. 260
10.6.3.1. Примесь MonthMixin: извлечение месяца……………………………………………………. 260
10.6.3.2. Контроллер MonthArchiveView: вывод записей за месяц………………………….. 260
10.6.4. Вывод записей по неделям……………………………………………………………………………………….. 261
10.6.4.1. Примесь WeekMixin: извлечение номера недели………………………………………… 261
10.6.4.2. Контроллер WeekArchiveView: вывод записей за неделю…………………………. 262
10.6.5. Вывод записей по дням…………………………………………………………………………………………….. 262
10.6.5.1. Примесь DayMixin: извлечение заданного числа……………………………………….. 263
10.6.5.2. Контроллер DayArchiveView: вывод записей за день………………………………… 263
10.6.6. Контроллер TodayArchiveView: вывод записей за текущее число……………………….. 264
10.6.7. Контроллер DateDetailView: вывод одной записи за указанное число……………….. 264
10.7. Контроллер RedirectView: перенаправление……………………………………………………………….. 265
10.8. Контроллеры-классы смешанной функциональности………………………………………………… 267
10.9. Асинхронные контроллеры-классы………………………………………………………………………………. 268
Глава 11. Шаблоны и статические файлы: базовые инструменты……….. 270
11.1. Настройки проекта, касающиеся шаблонов………………………………………………………………… 270
11.2. Вывод данных. Директивы…………………………………………………………………………………………….. 275
11.3. Теги шаблонизатора………………………………………………………………………………………………………. 276
11.4. Фильтры…………………………………………………………………………………………………………………………… 283
11.5. Наследование шаблонов……………………………………………………………………………………………….. 292
11.6. Включение шаблонов…………………………………………………………………………………………………….. 294
11.7. Обработка статических файлов…………………………………………………………………………………….. 295
11.7.1. Настройка подсистемы статических файлов…………………………………………………………. 295
11.7.2. Формирование интернет-адресов статических файлов………………………………………… 297
Глава 12. Пагинатор…………………………………………………………………………….. 299
12.1. Класс Paginator: сам пагинатор. Создание пагинатора…………………………………………….. 299
12.2. Класс Page: часть пагинатора. Вывод пагинатора…………………………………………………….. 302
Глава 13. Формы, связанные с моделями……………………………………………… 303
13.1. Создание форм, связанных с моделями………………………………………………………………………… 303
13.1.1. Создание форм с помощью фабрики классов…………………………………………………………. 303
13.1.2. Создание форм путем быстрого объявления………………………………………………………….. 305
13.1.3. Создание форм путем полного объявления……………………………………………………………. 306
13.1.3.1. Как выполняется полное объявление?………………………………………………………… 306
13.1.3.2. Параметры, поддерживаемые всеми типами полей…………………………………… 308
13.1.3.3. Классы полей форм……………………………………………………………………………………….. 309
13.1.3.4. Классы полей форм, применяемые по умолчанию…………………………………….. 313
13.1.4. Задание элементов управления……………………………………………………………………………….. 314
13.1.4.1. Классы элементов управления…………………………………………………………………….. 314
13.1.4.2. Элементы управления, применяемые по умолчанию………………………………… 317
13.2. Обработка форм……………………………………………………………………………………………………………… 318
13.2.1. Добавление записи посредством формы………………………………………………………………… 318
13.2.1.1. Создание формы для добавления записи……………………………………………………. 318
13.2.1.2. Повторное создание формы………………………………………………………………………….. 318
13.2.1.3. Валидация данных, занесенных в форму……………………………………………………. 319
13.2.1.4. Сохранение данных, занесенных в форму………………………………………………….. 320
13.2.1.5. Доступ к данным, занесенным в форму……………………………………………………….. 321
13.2.2. Правка записи посредством формы………………………………………………………………………… 321
13.2.3. Некоторые соображения касательно удаления записей………………………………………. 322
13.3. Вывод форм на экран……………………………………………………………………………………………………… 323
13.3.1. Быстрый вывод форм………………………………………………………………………………………………… 323
13.3.2. Расширенный вывод форм……………………………………………………………………………………….. 325
13.4. Валидация в формах………………………………………………………………………………………………………. 327
13.4.1. Валидация полей формы………………………………………………………………………………………….. 327
13.4.1.1. Валидация с применением валидаторов…………………………………………………….. 327
13.4.1.2. Валидация путем переопределения методов формы…………………………………. 328
13.4.2. Валидация формы…………………………………………………………………………………………………….. 328
Глава 14. Наборы форм, связанные с моделями……………………………………. 330
14.1. Создание наборов форм, связанных с моделями…………………………………………………………. 330
14.2. Обработка наборов форм, связанных с моделями……………………………………………………….. 334
14.2.1. Создание набора форм, связанного с моделью……………………………………………………… 334
14.2.2. Повторное создание набора форм…………………………………………………………………………… 334
14.2.3. Валидация и сохранение набора форм…………………………………………………………………… 335
14.2.4. Доступ к данным, занесенным в набор форм…………………………………………………………. 336
14.2.5. Реализация переупорядочивания записей……………………………………………………………… 337
14.3. Вывод наборов форм на экран………………………………………………………………………………………. 338
14.3.1. Быстрый вывод наборов форм…………………………………………………………………………………. 338
14.3.2. Расширенный вывод наборов форм………………………………………………………………………… 339
14.4. Валидация в наборах форм……………………………………………………………………………………………. 341
14.5. Встроенные наборы форм……………………………………………………………………………………………… 342
14.5.1. Создание встроенных наборов форм………………………………………………………………………. 342
14.5.2. Обработка встроенных наборов форм……………………………………………………………………. 342
Глава 15. Разграничение доступа: базовые инструменты…………………….. 344
15.1. Как работает подсистема разграничения доступа?……………………………………………………. 344
15.2. Подготовка подсистемы разграничения доступа………………………………………………………… 345
15.2.1. Настройка подсистемы разграничения доступа……………………………………………………. 345
15.2.2. Создание суперпользователя…………………………………………………………………………………… 346
15.2.3. Смена пароля пользователя…………………………………………………………………………………….. 347
15.3. Работа со списками пользователей и групп…………………………………………………………………. 347
15.3.1. Список пользователей………………………………………………………………………………………………. 347
15.3.2. Группы пользователей. Список групп…………………………………………………………………….. 349
15.4. Вход, выход и служебные процедуры………………………………………………………………………….. 350
15.4.1. Контроллер LoginView: вход на сайт……………………………………………………………………… 350
15.4.2. Контроллер LogoutView: выход с сайта…………………………………………………………………. 352
15.4.3. Контроллер PasswordChangeView: смена пароля…………………………………………………. 354
15.4.4. Контроллер PasswordChangeDoneView: уведомление об успешной смене пароля 355
15.4.5. Контроллер PasswordResetView: отправка письма для сброса пароля……………….. 355
15.4.6. Контроллер PasswordResetDoneView: уведомление об отправке письма для сброса пароля 357
15.4.7. Контроллер PasswordResetConfirmView: собственно сброс пароля……………………. 358
15.4.8. Контроллер PasswordResetCompleteView: уведомление об успешном сбросе пароля……….. 359
15.5. Получение сведений о пользователях…………………………………………………………………………… 360
15.5.1. Получение сведений о текущем пользователе……………………………………………………….. 360
15.5.2. Получение пользователей, обладающих заданным правом………………………………… 363
15.6. Авторизация…………………………………………………………………………………………………………………….. 364
15.6.1. Авторизация в контроллерах…………………………………………………………………………………… 364
15.6.1.1. Авторизация в контроллерах-функциях: непосредственные проверки……. 364
15.6.1.2. Авторизация в контроллерах-функциях: применение декораторов…………. 365
15.6.1.3. Авторизация в контроллерах-классах………………………………………………………… 367
15.6.2. Авторизация в шаблонах…………………………………………………………………………………………. 369
Часть III. Расширенные инструменты
и дополнительные библиотеки…………………………………………….. 371
Глава 16. Модели: расширенные инструменты…………………………………….. 373
16.1. Управление выборкой полей…………………………………………………………………………………………. 373
16.2. Связи «многие-со-многими» с дополнительными данными………………………………………… 377
16.3. Полиморфные связи………………………………………………………………………………………………………… 380
16.4. Наследование моделей…………………………………………………………………………………………………… 384
16.4.1. Прямое наследование моделей………………………………………………………………………………… 384
16.4.2. Абстрактные модели………………………………………………………………………………………………… 386
16.4.3. Прокси-модели………………………………………………………………………………………………………….. 387
16.5. Создание своих диспетчеров записей…………………………………………………………………………… 388
16.5.1. Создание диспетчеров записей……………………………………………………………………………….. 388
16.5.2. Создание диспетчеров обратной связи…………………………………………………………………… 390
16.6. Создание своих наборов записей………………………………………………………………………………….. 391
16.7. Управление транзакциями……………………………………………………………………………………………… 393
16.7.1. Автоматическое управление транзакциями…………………………………………………………… 393
16.7.1.1. Режим по умолчанию: каждая операция — в отдельной транзакции………. 394
16.7.1.2. Режим атомарных запросов…………………………………………………………………………. 394
16.7.1.3. Режим по умолчанию на уровне контроллера……………………………………………. 395
16.7.1.4. Режим атомарных запросов на уровне контроллера…………………………………. 395
16.7.2. Ручное управление транзакциями…………………………………………………………………………… 397
16.7.3. Обработка подтверждения транзакции………………………………………………………………….. 399