УДК 004.04
ББК 32.372
М47
М47 Django 4 в примерах / пер. с англ. А. В. Логунова. – М.: ДМК Пресс, 2023. –
800 с.: ил.
Меле А.
ISBN 978-5-93700-204-4
Книга охватывает многообразные аспекты создания веб-приложений с помощью
самого популярного веб-фреймворка Django на языке Python. Изучив
четыре проекта разной направленности (приложение для ведения блога и электронной
коммерции, социальный веб-сайт, платформа электронного обучения),
вы получите хорошее представление о том, как работает Django.
Издание предназначено читателям с базовыми знаниями Python, а также программистам,
переходящим на Django с других веб-фреймворков. Оно подойдет
и тем, кто уже использует Django в своей работе и хочет расширить свои навыки.
Для изучения материала необходимы базовый опыт работы с Python и знание
HTML и JavaScript.
УДК 004.04
ББК 32.372
Copyright ©Packt Publishing 2022. First published in the English language under the title
Django 4 By Example - Fourth Edition – (9781801813051).
Все права защищены. Любая часть этой книги не может быть воспроизведена в какой
бы то ни было форме и какими бы то ни было средствами без письменного разрешения
владельцев авторских прав.
ISBN 978-1-80181-305-1 (англ.)
ISBN 978-5-93700-204-4 (рус.)
© 2022 Packt Publishing
© Перевод, оформление, издание,
ДМК Пресс, 2023
Стр.5
Содержание
От издательства ....................................................................................................17
Вступительное слово .........................................................................................18
Об авторе .................................................................................................................20
О рецензенте .........................................................................................................21
Предисловие ..........................................................................................................22
Глава 1. Разработка приложения для ведения блога .......................28
Установка языка Python ............................................................................................29
Создание виртуальной среды Python .....................................................................30
Установка веб-фреймворка Django .........................................................................31
Установка Django с по мощью pip ........................................................................31
Новые функциональные возможности Django 4 ...............................................32
Общий обзор веб-фреймворка Django....................................................................33
Главные компоненты веб-фреймворка ..................................................................33
Архитектура Django ...................................................................................................34
Создание первого проекта ........................................................................................35
Применение первоначальных миграций базы данных ...................................36
Запуск и выполнение сервера разработки .........................................................37
Настроечные параметры проекта .......................................................................39
Проекты и приложения .........................................................................................40
Создание приложения...........................................................................................41
Создание моделей данных блога .............................................................................42
Создание модели поста .........................................................................................42
Добавление полей даты/времени ........................................................................44
Определение предустановленного порядка сортировки ................................45
Добавление индекса базы данных ......................................................................46
Активация приложения ........................................................................................47
Добавление поля статуса ......................................................................................47
Стр.7
Содержание
7
Добавление взаимосвязи многие-к-одному .....................................................50
Создание и применение миграций .....................................................................51
Создание сайта администрирования для моделей ...............................................54
Создание суперпользователя ...............................................................................54
Сайт администрирования ....................................................................................55
Добавление моделей на сайт администрирования ..........................................56
Адаптация внешнего вида моделей под конкретно-прикладную задачу ....58
Работа с наборами запросов QuerySet и менеджерами .......................................60
Создание объектов.................................................................................................61
Обновление объектов ............................................................................................62
Извлечение объектов ............................................................................................63
Применение метода filter() ..............................................................................63
Применение метода exclude() ..........................................................................64
Применение метода order_by() ........................................................................64
Удаление объектов .................................................................................................64
Когда вычисляются наборы запросов QuerySet ................................................65
Создание модельных менеджеров ......................................................................65
Разработка представлений списка и детальной информации ...........................67
Создание представлений списка постов и детальной информации
о посте .....................................................................................................................67
Применение функции сокращенного доступа get_object_or_404() .................68
Добавление шаблонов URL-адресов представлений ........................................69
Создание шаблонов представлений ........................................................................71
Создание базового шаблона .................................................................................72
Создание шаблона списка постов .......................................................................73
Доступ к приложению ...........................................................................................74
Создание шаблона детальной информации о посте ........................................74
Цикл запроса/ответа ..................................................................................................75
Дополнительные ресурсы .........................................................................................76
Резюме .........................................................................................................................77
Присоединяйтесь к нам на Discord .....................................................................78
Глава 2. Усовершенствование блога за счет продвинутых
функциональностей ...........................................................................................79
Использование канонических URL-адресов для моделей ...................................80
Создание дружественных для поисковой оптимизации URL-адресов
постов...........................................................................................................................82
Видоизменение шаблонов URL-адресов ................................................................84
Видоизменение представлений ..............................................................................85
Видоизменение канонического URL-адреса постов .............................................86
Добавление постраничной разбивки ......................................................................87
Добавление постраничной разбивки в представление списка постов .........87
Создание шаблона постраничной разбивки .....................................................88
Обработка ошибок постраничной разбивки .....................................................91
Разработка представлений на основе классов ......................................................94
Стр.8
8
Содержание
Зачем использовать представления на основе классов ...................................95
Использование представления на основе класса для отображения
списка постов .........................................................................................................95
Рекомендация постов по электронной почте ........................................................97
Разработка форм с по мощью Django ..................................................................98
Работа с формами в представлениях ..................................................................99
Отправка электронных писем с по мощью Django..........................................101
Отправка электронных писем в представлениях ...........................................106
Прорисовка форм в шаблонах ...........................................................................107
Создание системы комментариев .........................................................................112
Разработка модели комментария .....................................................................112
Добавление комментариев на сайт администрирования .............................114
Создание форм из моделей ................................................................................116
Оперирование формами ModelForm в представлениях ................................116
Создание шаблонов комментарной формы ....................................................119
Добавление комментариев в представление детальной информации
о посте ...................................................................................................................121
Добавление комментариев в шаблон детальной информации о посте ......122
Дополнительные ресурсы .......................................................................................129
Резюме .......................................................................................................................130
Глава 3. Расширение приложения для ведения блога ...................131
Добавление функциональности тегирования .....................................................132
Извлечение постов по сходству .............................................................................141
Создание конкретно-прикладных шаблонных тегов и фильтров ....................146
Реализация конкретно-прикладных шаблонных тегов .................................147
Создание простого шаблонного тега ................................................................147
Создание шаблонного тега включения ............................................................150
Создание шаблонного тега, возвращающего набор запросов ......................152
Реализация конкретно-прикладных шаблонных фильтров .........................154
Создание шаблонного фильтра для поддержки синтаксиса Markdown ......154
Добавление карты сайта .........................................................................................159
Создание новостных лент для постов блога ........................................................164
Добавление полнотекстового поиска в блог ........................................................171
Установка базы данных PostgreSQL ..................................................................172
Создание базы данных PostgreSQL ...................................................................173
Выгрузка существующих данных ......................................................................174
Переключение базы данных в проекте ............................................................174
Загрузка данных в новую базу данных .............................................................176
Простые операции поиска ..................................................................................177
Поиск по нескольким полям ..............................................................................177
Разработка представления поиска ....................................................................178
Выделение основ слов и ранжирование результатов.....................................182
Выделение основ слов и удаление стоп-слов на разных языках ..................183
Взвешивание запросов .......................................................................................184
Поиск по триграммному сходству.....................................................................185
Стр.9
Содержание
9
Дополнительные ресурсы .......................................................................................186
Резюме .......................................................................................................................187
Глава 4. Разработка социального веб-сайта ........................................188
Создание проекта социального веб-сайта ...........................................................189
Запуск проекта социального веб-сайта ............................................................189
Использование поставляемого с Django фреймворка аутентификации .........191
Создание представления входа в систему .......................................................192
Использование встроенных в Django представлений аутентификации .....199
Представления входа и выхода ..........................................................................199
Представления смены пароля ............................................................................205
Представление сброса пароля ............................................................................208
Регистрация пользователей и профили пользователей ....................................216
Регистрация пользователя .................................................................................216
Расширение модели пользователя ....................................................................223
Установка библиотеки Pillow и раздача медиафайлов ..................................224
Создание миграций для модели профиля .......................................................225
Использование конкретно-прикладной модели пользователя ...............231
Использование фреймворка сообщений .........................................................231
Разработка конкретно-прикладного бэкенда аутентификации ......................235
Предотвращение использования существующего адреса электронной
почты .....................................................................................................................238
Дополнительные ресурсы .......................................................................................239
Резюме .......................................................................................................................240
Глава 5. Реализация социальной аутентификации ..........................241
Добавление социальной аутентификации на сайт .............................................242
Обеспечение работы сервера разработки по протоколу HTTPS ...................245
Аутентификация с учетной записью Facebook ................................................248
Аутентификация с учетной записью Twitter ...................................................256
Аутентификация с учетной записью Google....................................................268
Создание профиля пользователей, регистрирующихся посредством
социальной аутентификации ............................................................................277
Дополнительные ресурсы .......................................................................................279
Резюме .......................................................................................................................280
Глава 6. Распространение контента на веб-сайте ............................281
Создание веб-сайта для управления визуальными закладками ......................282
Разработка модели изображения ......................................................................282
Создание взаимосвязей многие-ко-многим ...................................................284
Регистрация модели изображения на сайте администрирования ..............285
Отправка контента с других сайтов ......................................................................286
Очистка полей формы .........................................................................................287
Установка библиотеки requests ..........................................................................288
Стр.10
10
Содержание
Переопределение метода save() класса ModelForm ........................................288
Разработка букмарклета с по мощью JavaScript ..............................................293
Создание представления детальной информации об изображениях..............306
Создание миниатюр изображений с по мощью easy-thumbnails ......................309
Добавление асинхронных действий с по мощью JavaScript ...............................312
Загрузка JavaScript в DOM ...................................................................................314
Защита от подделки межсайтовых HTTP-запросов на JavaScript.................315
Выполнение HTTP-запросов с по мощью JavaScript .......................................317
Добавление бесконечной постраничной прокрутки в список изображений .....323
Дополнительные ресурсы .......................................................................................330
Резюме .......................................................................................................................331
Глава 7. Отслеживание действий пользователя ................................332
Разработка системы подписки ...............................................................................333
Формирование взаимосвязей многие-ко-многим с промежуточной
моделью .................................................................................................................333
Создание представлений списка и детальной информации
для профилей пользователей ........................................................................336
Добавление действий пользователя по подписке/отписке с по мощью
JavaScript ...............................................................................................................342
Разработка типового приложения для потока активности ...............................345
Применение фреймворка contenttypes ............................................................346
Добавление обобщенных отношений в модели .............................................347
Игнорирование повторных действий в потоке активности .........................351
Добавление действий пользователя в поток активности ..............................352
Отображение потока активности ......................................................................355
Оптимизация наборов запросов, предусматривающих связанные
объекты .................................................................................................................355
Применение метода select_related() .............................................................356
Применение метода prefetch_related() .........................................................357
Создание шаблонов действий ............................................................................357
Использование меню отладочных инструментов Django ..................................366
Установка меню отладочных инструментов Django .......................................367
Панели меню отладочных инструментов Django ...........................................370
Команды меню отладочных инструментов Django ........................................373
Использование сигналов для денормализации количественных данных ......361
Работа с сигналами ..............................................................................................361
Конфигурационные классы приложений ........................................................364
Подсчет просмотров изображений с по мощью хранилища Redis....................374
Установка платформы Docker ............................................................................375
Установка хранилища Redis ...............................................................................375
Использование хранилища Redis вместе с Python .........................................377
Хранение просмотров изображений в хранилище Redis ..............................379
Хранение рейтинга в хранилище Redis ............................................................381
Следующие шаги с Redis .....................................................................................384
Дополнительные ресурсы .......................................................................................385
Резюме .......................................................................................................................385
Стр.11
Содержание
11
Глава 8. Разработка интернет-магазина ................................................387
Создание проекта интернет-магазина .................................................................388
Создание моделей каталога товаров ................................................................389
Регистрация моделей каталога на сайте администрирования .....................393
Формирование представлений каталога .........................................................395
Создание шаблонов каталога .............................................................................397
Разработка корзины покупок .................................................................................403
Использование сеансов Django ..........................................................................403
Настроечные параметры сеанса ........................................................................404
Срок истечения сеанса ........................................................................................405
Хранение корзин покупок в сеансах ................................................................406
Создание представлений корзины покупок ....................................................410
Добавление товаров в корзину ......................................................................411
Разработка шаблона отображения корзины ...............................................413
Добавление товаров в корзину ......................................................................415
Обновление количества товаров в корзине ................................................417
Регистрация заказов клиентов ..............................................................................421
Создание моделей заказа ...................................................................................422
Включение моделей заказа на сайт администрирования .............................424
Создание заказов клиентов ................................................................................425
Создание процессора контекста для текущей корзины ................................418
Процессоры контекста ....................................................................................418
Установка корзины в контекст запроса .......................................................419
Асинхронные задания .............................................................................................431
Работа с асинхронными заданиями .................................................................431
Работники, очереди сообщений и брокеры сообщений ................................432
Использование Django с Celery и RabbitMQ .................................................433
Отслеживание Celery с по мощью инструмента Flower ..................................440
Дополнительные ресурсы .......................................................................................443
Резюме .......................................................................................................................443
Глава 9. Управление платежами и заказами .......................................444
Интеграция платежного шлюза .............................................................................444
Создание учетной записи Stripe ........................................................................445
Установка библиотеки Stripe ..............................................................................448
Добавление Stripe в проект ................................................................................449
Формирование процесса платежа .....................................................................450
Интеграция платежного инструмента Stripe Checkout ..............................452
Тестирование процесса оформления заказа ...................................................459
Использование тестовых кредитных карт ...................................................461
Проверка платежной информации в информационной панели Stripe .....463
Применение веб-перехватчиков для получения уведомлений
о платежах .............................................................................................................467
Создание конечной точки веб-перехватчика .............................................467
Тестирование уведомлений веб-перехватчиков ........................................472
Стр.12
12
Содержание
Отсылки к платежам Stripe в заказах ...............................................................475
Выход в прямой эфир ..........................................................................................479
Экспорт заказов в CSV-файлы ................................................................................480
Добавление конкретно-прикладных действий на сайт
администрирования ............................................................................................480
Расширение сайта администрирования за счет конкретно-прикладных
представлений ..........................................................................................................483
Динамическое генерирование счетов-фактур в формате PDF .........................488
Установка библиотеки WeasyPrint .....................................................................489
Создание шаблона PDF .......................................................................................489
Прорисовка PDF-файлов .....................................................................................490
Отправка PDF-файлов по электронной почте .................................................494
Дополнительные ресурсы .......................................................................................497
Резюме .......................................................................................................................498
Глава 10. Расширение магазина ................................................................499
Создание купонной системы .................................................................................499
Разработка купонной модели ............................................................................500
Применение купона к корзине ..........................................................................504
Применение купонов к заказам ........................................................................512
Создание купонов для платежного инструмента Stripe Checkout ...............517
Добавление купонов в заказы на сайте администрирования
и в счета-фактуры в формате PDF .....................................................................520
Разработка рекомендательного механизма ........................................................523
Рекомендация товаров на основе предыдущих покупок ..............................524
Дополнительные ресурсы .......................................................................................532
Резюме .......................................................................................................................532
Глава 11. Добавление интернационализации в магазин ..............534
Интернационализация в Django ............................................................................535
Настроечные параметры интернационализации и локализации................535
Команды управления интернационализацией ...............................................536
Установка инструментария gettext ...................................................................536
Как добавлять переводы в проект Django ........................................................537
Как Django определяет текущий язык ..............................................................537
Подготовка проекта к интернационализации ....................................................538
Перевод исходного кода Python .............................................................................539
Стандартные переводы .......................................................................................540
Ленивые переводы ..............................................................................................540
Переводы с переменными ..................................................................................540
Формы множественного числа в переводах ....................................................541
Перевод собственного исходного кода .............................................................541
Перевод шаблонов ...................................................................................................545
Шаблонный тег {% trans %} .................................................................................546
Стр.13
Содержание
13
Шаблонный тег {% blocktrans %} ........................................................................546
Перевод шаблонов магазина ..............................................................................547
Использование интерфейса перевода Rosetta .....................................................551
Нечеткие переводы ..................................................................................................554
Шаблоны URL-адресов для интернационализации ............................................554
Добавление префикса языка в шаблоны URL-адресов ..................................555
Перевод шаблонов URL-адресов ........................................................................556
Переключение языка сайта ....................................................................................560
Перевод моделей с по мощью модуля django-parler ...........................................562
Установка модуля django-parler .........................................................................562
Перевод полей моделей ......................................................................................563
Интеграция переводов на сайт администрирования ....................................565
Создание миграций для переводов моделей ..................................................566
Использование переводов с ORM-преобразователем ...................................569
Адаптация представлений под переводы ........................................................570
Локализация формата .............................................................................................572
Использование модуля django-localflavor для валидации полей формы ........573
Дополнительные ресурсы .......................................................................................575
Резюме .......................................................................................................................576
Глава 12. Разработка платформы электронного обучения .........577
Настройка проекта электронного обучения ........................................................578
Раздача медиафайлов ..............................................................................................579
Разработка моделей курса ......................................................................................580
Регистрация моделей на сайте администрирования .....................................582
Использование фикстур с целью предоставления моделям
первоначальных данных ....................................................................................583
Создание моделей полиморфного содержимого ................................................586
Использование модельного наследования ......................................................587
Абстрактные модели .......................................................................................588
Наследование многотабличной модели ......................................................588
Прокси-модели ................................................................................................589
Создание моделей Content .................................................................................589
Создание конкретно-прикладных модельных полей ....................................592
Добавление упорядочивания в модули и объекты содержимого .................594
Добавление представлений аутентификации .....................................................598
Добавление системы аутентификации ............................................................598
Создание шаблонов аутентификации ..............................................................599
Дополнительные ресурсы .......................................................................................602
Резюме .......................................................................................................................603
Глава 13. Создание системы управления контентом ......................604
Создание CMS ...........................................................................................................604
Создание представлений на основе классов ...................................................605
Стр.14
14
Содержание
Использование примесей для представлений на основе классов ................605
Работа с группами и разрешениями .................................................................608
Ограничение доступа к представлениям, основанным на классах .........610
Управление модулями курса и их содержимым .................................................616
Использование наборов форм для модулей курса .........................................616
Добавление содержимого в модули курса .......................................................621
Управление модулями и их содержимым ........................................................627
Дополнительные ресурсы .......................................................................................641
Резюме .......................................................................................................................641
Переупорядочивание модулей и их содержимого ..............................................632
Использование примесей из модуля django-braces ...................................633
Глава 14. Прорисовка и кеширование контента ................................642
Отображение курсов ................................................................................................643
Добавление регистрации студентов .....................................................................648
Создание представления регистрации студентов ..........................................649
Зачисление на курсы ...........................................................................................651
Доступ к содержимому курсов ...............................................................................655
Прорисовка разных типов содержимого ..........................................................659
Использование кеш-фреймворка ..........................................................................661
Доступные кеш-бэкенды ....................................................................................662
Установка резидентного кеш-сервера Memcached .........................................663
Установка образа Memcached платформы Docker ..........................................663
Установка привязки Python к Memcached ........................................................663
Настроечные параметры кеша ..........................................................................664
Добавление кеш-сервера Memcached в проект ...............................................664
Уровни кеша .........................................................................................................665
Использование низкоуровневого API кеша .....................................................665
Проверка запросов к кешу с по мощью меню отладочных
инструментов Django Debug Toolbar .................................................................667
Кеширование на основе динамических данных .........................................671
Кеширование фрагментов шаблона .................................................................672
Кеширование представлений ............................................................................673
Использование сайтового кеша ....................................................................674
Использование кеш-бэкенда Redis ...................................................................675
Отслеживание сервера Redis с по мощью приложения Django
Redisboard ..............................................................................................................676
Дополнительные ресурсы .......................................................................................678
Резюме .......................................................................................................................679
Глава 15. Разработка API ...............................................................................680
Разработка RESTful API ...........................................................................................681
Установка фреймворка Django REST framework ..............................................681
Определение сериализаторов ............................................................................682
Стр.15
Содержание
15
Что такое парсер и рендерер ..............................................................................683
Разработка представлений списка и детальной информации .....................684
Потребление API ..................................................................................................686
Создание вложенных сериализаторов .............................................................688
Разработка конкретно-прикладных представлений API ..............................690
Обработка аутентификации ...............................................................................691
Добавление разрешений в представления ......................................................692
Создание наборов представлений и маршрутизаторов ................................694
Добавление дополнительных действий в наборы представлений ..............696
Создание конкретно-прикладных разрешений .............................................697
Сериализация содержимого курса ....................................................................697
Потребление RESTful API ....................................................................................700
Дополнительные ресурсы .......................................................................................703
Резюме .......................................................................................................................704
Глава 16. Разработка чат-сервера .............................................................705
Создание приложения для ведения чата ..............................................................705
Реализация представления чат-комнаты ........................................................706
Реально-временной Django на основе Channels .................................................709
Асинхронные приложения с использованием ASGI .......................................710
Цикл запроса/ответа с использованием приложения Channels ...................710
Установка приложения-обертки Сhannels ...........................................................712
Написание потребителя ..........................................................................................714
Маршрутизация ........................................................................................................716
Реализация WebSocket-клиента .............................................................................717
Активирование канального слоя ...........................................................................723
Каналы и группы ..................................................................................................724
Установление канального слоя с использованием Redis ...............................724
Обновление потребителя с целью широковещательной рассылки
сообщений ............................................................................................................725
Добавление контекста в сообщения .................................................................730
Видоизменение потребителя с целью обеспечения полной
асинхронности .........................................................................................................733
Интеграция приложения для ведения чата с существующими
представлениями .....................................................................................................735
Дополнительные ресурсы .......................................................................................736
Резюме .......................................................................................................................737
Глава 17. Выход в прямой эфир .................................................................738
Создание производственной среды ......................................................................739
Управление настроечными параметрами для нескольких сред ..................739
Настрочные параметры локальной среды ...................................................740
Запуск локальной среды .................................................................................741
Настройки производственной среды ...........................................................741
Стр.16
16
Содержание
Использование инструмента Docker Compose .....................................................743
Установка инструмента Docker Compose .........................................................743
Создание файла Dockerfile ..................................................................................744
Добавление требующихся пакетов Python.......................................................745
Создание файла Compose платформы Docker .................................................746
Конфигурирование службы PostgreSQL ...........................................................749
Применение миграции базы данных и создание суперпользователя ........752
Конфигурирование службы Redis ......................................................................753
Раздача Django через WSGI и NGINX ....................................................................754
Использование сервера приложений uWSGI ...................................................755
Конфигурирование сервера приложений uWSGI............................................756
Использование веб-сервера NGINX ..................................................................757
Конфигурирование веб-сервера NGINX ...........................................................758
Использование хост-имени ................................................................................760
Раздача статических и мультимедийных ресурсов ........................................761
Сбор статических файлов ...............................................................................761
Раздача статических файлов с по мощью веб-сервера NGINX .................762
Обеспечение защиты сайта с помощью SSL/TLS ................................................764
Проверка готовности проекта к работе в производственной среде ............764
Конфигурирование проекта Django под SSL/TLS ............................................765
Создание SSL/TLS-сертификата ........................................................................767
Конфигурирование веб-сервера NGINX под использование SSL/TLS .........767
Перенаправление HTTP-трафика на HTTPS ....................................................770
Использование Daphne для приложения Django Channels ................................771
Использование безопасных соединений для веб-сокетов ............................773
Включение веб-сервера Daphne в конфигурацию веб-сервера NGINX .......773
Создание конкретно-прикладных промежуточных программных
компонентов .............................................................................................................777
Создание поддоменного промежуточного компонента................................778
Раздача нескольких поддоменов с по мощью веб-сервера NGINX ..........780
Реализация конкретно-прикладных команд управления .................................780
Дополнительные ресурсы .......................................................................................783
Резюме .......................................................................................................................784
Предметный указатель ...................................................................................786
Стр.17