Глава 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