От издательства....19
Вступительное слово....20
Об авторе....22
О рецензенте....23
Предисловие....24
Глава 1. Разработка приложения для ведения блога....30
Установка языка Python....31
Создание виртуальной среды Python....32
Установка веб-фреймворка Django....33
Установка Django с помощью pip....33
Новые функциональные возможности Django 4....34
Главные компоненты веб-фреймворка....35
Общий обзор веб-фреймворка Django....35
Архитектура Django....36
Создание первого проекта....37
Применение первоначальных миграций базы данных....38
Запуск и выполнение сервера разработки....39
Настроечные параметры проекта....41
Проекты и приложения....42
Создание приложения....43
Создание моделей данных блога....44
Создание модели поста....44
Добавление полей даты/времени....46
Определение предустановленного порядка сортировки....47
Добавление индекса базы данных....48
Активация приложения....49
Добавление поля статуса....49
Добавление взаимосвязи многие-к-одному....52
Создание и применение миграций....53
Создание сайта администрирования для моделей....56
Создание суперпользователя....56
Сайт администрирования....57
Добавление моделей на сайт администрирования....58
Адаптация внешнего вида моделей под конкретно-прикладную задачу....60
Работа с наборами запросов QuerySet и менеджерами....62
Создание объектов....63
Обновление объектов....64
Извлечение объектов....65
Применение метода filter()....65
Применение метода exclude()....66
Применение метода order_by()....66
Удаление объектов....66
Когда вычисляются наборы запросов QuerySet....67
Создание модельных менеджеров....67
Разработка представлений списка и детальной информации....69
Создание представлений списка постов и детальной информации о посте....69
Применение функции сокращенного доступа get_object_or_404()....70
Добавление шаблонов URL-адресов представлений....71
Создание шаблонов представлений....73
Создание базового шаблона....74
Создание шаблона списка постов....75
Доступ к приложению....76
Создание шаблона детальной информации о посте....76
Цикл запроса/ответа....77
Дополнительные ресурсы....78
Резюме....79
Присоединяйтесь к нам на Discord....80
Глава 2. Усовершенствование блога за счет продвинутых функциональностей....81
Использование канонических URL-адресов для моделей....82
Создание дружественных для поисковой оптимизации URL-адресов постов....84
Видоизменение шаблонов URL-адресов....86
Видоизменение представлений....87
Видоизменение канонического URL-адреса постов....88
Добавление постраничной разбивки....89
Добавление постраничной разбивки в представление списка постов....89
Создание шаблона постраничной разбивки....90
Обработка ошибок постраничной разбивки....93
Разработка представлений на основе классов....96
Зачем использовать представления на основе классов....97
Использование представления на основе класса для отображения списка постов....97
Рекомендация постов по электронной почте....99
Разработка форм с помощью Django....100
Работа с формами в представлениях....101
Отправка электронных писем с помощью Django....103
Отправка электронных писем в представлениях....108
Прорисовка форм в шаблонах....109
Создание системы комментариев....114
Разработка модели комментария....114
Добавление комментариев на сайт администрирования....116
Оперирование формами ModelForm в представлениях....118
Создание форм из моделей....118
Создание шаблонов комментарной формы....121
Добавление комментариев в представление детальной информации о посте....123
Добавление комментариев в шаблон детальной информации о посте....124
Дополнительные ресурсы....131
Резюме....132
Глава 3. Расширение приложения для ведения блога....133
Добавление функциональности тегирования....134
Извлечение постов по сходству....143
Создание конкретно-прикладных шаблонных тегов и фильтров....148
Реализация конкретно-прикладных шаблонных тегов....149
Создание простого шаблонного тега....149
Создание шаблонного тега включения....152
Создание шаблонного тега, возвращающего набор запросов....154
Реализация конкретно-прикладных шаблонных фильтров....156
Создание шаблонного фильтра для поддержки синтаксиса Markdown....156
Добавление карты сайта....161
Создание новостных лент для постов блога....166
Добавление полнотекстового поиска в блог....173
Установка базы данных PostgreSQL....174
Создание базы данных PostgreSQL....175
Выгрузка существующих данных....176
Переключение базы данных в проекте....176
Загрузка данных в новую базу данных....178
Поиск по нескольким полям....179
Простые операции поиска....179
Разработка представления поиска....180
Выделение основ слов и ранжирование результатов....184
Выделение основ слов и удаление стоп-слов на разных языках....185
Взвешивание запросов....186
Поиск по триграммному сходству....187
Дополнительные ресурсы....188
Резюме....189
Глава 4. Разработка социального веб-сайта....190
Создание проекта социального веб-сайта....191
Запуск проекта социального веб-сайта....191
Использование поставляемого с Django фреймворка аутентификации....193
Создание представления входа в систему....194
Использование встроенных в Django представлений аутентификации....201
Представления входа и выхода....201
Представления смены пароля....207
Представление сброса пароля....210
Регистрация пользователей и профили пользователей....218
Регистрация пользователя....218
Расширение модели пользователя....225
Установка библиотеки Pillow и раздача медиафайлов....226
Создание миграций для модели профиля....227
Использование конкретно-прикладной модели пользователя....233
Использование фреймворка сообщений....233
Разработка конкретно-прикладного бэкенда аутентификации....237
Предотвращение использования существующего адреса электронной почты....240
Дополнительные ресурсы....241
Резюме....242
Глава 5. Реализация социальной аутентификации....243
Добавление социальной аутентификации на сайт....244
Обеспечение работы сервера разработки по протоколу HTTPS....247
Аутентификация с учетной записью Facebook....250
Аутентификация с учетной записью Twitter....258
Аутентификация с учетной записью Google....270
Создание профиля пользователей, регистрирующихся посредством социальной аутентификации....279
Дополнительные ресурсы....281
Резюме....282
Глава 6. Распространение контента на веб-сайте....283
Создание веб-сайта для управления визуальными закладками....284
Разработка модели изображения....284
Создание взаимосвязей многие-ко-многим....286
Регистрация модели изображения на сайте администрирования....287
Отправка контента с других сайтов....288
Очистка полей формы....289
Переопределение метода save() класса ModelForm....290
Установка библиотеки requests....290
Разработка букмарклета с помощью JavaScript....295
Создание представления детальной информации об изображениях....308
Создание миниатюр изображений с помощью easy-thumbnails....311
Добавление асинхронных действий с помощью JavaScript....314
Загрузка JavaScript в DOM....316
Защита от подделки межсайтовых HTTP-запросов на JavaScript....317
Выполнение HTTP-запросов с помощью JavaScript....319
Добавление бесконечной постраничной прокрутки в список изображений....325
Дополнительные ресурсы....332
Резюме....333
Глава 7. Отслеживание действий пользователя....334
Разработка системы подписки....335
Формирование взаимосвязей многие-ко-многим с промежуточной моделью....335
Создание представлений списка и детальной информации для профилей пользователей....338
Добавление действий пользователя по подписке/отписке с помощью JavaScript....344
Разработка типового приложения для потока активности....347
Применение фреймворка contenttypes....348
Добавление обобщенных отношений в модели....349
Игнорирование повторных действий в потоке активности....353
Добавление действий пользователя в поток активности....354
Оптимизация наборов запросов, предусматривающих связанные объекты....357
Применение метода select_related()....358
Применение метода prefetch_related()....359
Отображение потока активности....357
Создание шаблонов действий....359
Использование сигналов для денормализации количественных данных....363
Работа с сигналами....363
Конфигурационные классы приложений....366
Использование меню отладочных инструментов Django....368
Установка меню отладочных инструментов Django....369
Панели меню отладочных инструментов Django....372
Команды меню отладочных инструментов Django....375
Подсчет просмотров изображений с помощью хранилища Redis....376
Установка платформы Docker....377
Установка хранилища Redis....377
Использование хранилища Redis вместе с Python....379
Хранение просмотров изображений в хранилище Redis....381
Хранение рейтинга в хранилище Redis....383
Следующие шаги с Redis....386
Дополнительные ресурсы....387
Резюме....387
Глава 8. Разработка интернет-магазина....389
Создание проекта интернет-магазина....390
Создание моделей каталога товаров....391
Регистрация моделей каталога на сайте администрирования....395
Формирование представлений каталога....397
Создание шаблонов каталога....399
Разработка корзины покупок....405
Использование сеансов Django....405
Настроечные параметры сеанса....406
Срок истечения сеанса....407
Хранение корзин покупок в сеансах....408
Создание представлений корзины покупок....412
Добавление товаров в корзину....413
Разработка шаблона отображения корзины....415
Добавление товаров в корзину....417
Обновление количества товаров в корзине....419
Создание процессора контекста для текущей корзины....420
Процессоры контекста....420
Установка корзины в контекст запроса....421
Регистрация заказов клиентов....423
Создание моделей заказа....424
Включение моделей заказа на сайт администрирования....426
Создание заказов клиентов....427
Асинхронные задания....433
Работа с асинхронными заданиями....433
Работники, очереди сообщений и брокеры сообщений....434
Использование Django с Celery и RabbitMQ....435
Отслеживание Celery с помощью инструмента Flower....442
Дополнительные ресурсы....445
Резюме....445
Глава 9. Управление платежами и заказами....446
Интеграция платежного шлюза....446
Создание учетной записи Stripe....447
Установка библиотеки Stripe....450
Добавление Stripe в проект....451
Формирование процесса платежа....452
Интеграция платежного инструмента Stripe Checkout....454
Тестирование процесса оформления заказа....461
Использование тестовых кредитных карт....463
Проверка платежной информации в информационной панели Stripe....465
Применение веб-перехватчиков для получения уведомлений о платежах....469
Создание конечной точки веб-перехватчика....469
Тестирование уведомлений веб-перехватчиков....474
Отсылки к платежам Stripe в заказах....477
Выход в прямой эфир....481
Экспорт заказов в CSV-файлы....482
Добавление конкретно-прикладных действий на сайт администрирования....482
Расширение сайта администрирования за счет конкретно-прикладных представлений....485
Динамическое генерирование счетов-фактур в формате PDF....490
Создание шаблона PDF....491
Установка библиотеки WeasyPrint....491
Прорисовка PDF-файлов....492
Отправка PDF-файлов по электронной почте....496
Дополнительные ресурсы....499
Резюме....500
Глава 10. Расширение магазина....501
Создание купонной системы....501
Разработка купонной модели....502
Применение купона к корзине....506
Применение купонов к заказам....514
Создание купонов для платежного инструмента Stripe Checkout....519
Добавление купонов в заказы на сайте администрирования и в счета-фактуры в формате PDF....522
Разработка рекомендательного механизма....525
Рекомендация товаров на основе предыдущих покупок....526
Дополнительные ресурсы....534
Резюме....534
Глава 11. Добавление интернационализации в магазин....536
Интернационализация в Django....537
Настроечные параметры интернационализации и локализации....537
Команды управления интернационализацией....538
Установка инструментария gettext....538
Как Django определяет текущий язык....539
Как добавлять переводы в проект Django....539
Подготовка проекта к интернационализации....540
Перевод исходного кода Python....541
Ленивые переводы....542
Переводы с переменными....542
Стандартные переводы....542
Перевод собственного исходного кода....543
Формы множественного числа в переводах....543
Перевод шаблонов....547
Шаблонный тег {% blocktrans %}....548
Шаблонный тег {% trans %}....548
Перевод шаблонов магазина....549
Использование интерфейса перевода Rosetta....553
Нечеткие переводы....556
Шаблоны URL-адресов для интернационализации....556
Добавление префикса языка в шаблоны URL-адресов....557
Перевод шаблонов URL-адресов....558
Переключение языка сайта....562
Перевод моделей с помощью модуля django-parler....564
Установка модуля django-parler....564
Перевод полей моделей....565
Интеграция переводов на сайт администрирования....567
Создание миграций для переводов моделей....568
Использование переводов с ORM-преобразователем....571
Адаптация представлений под переводы....572
Локализация формата....574
Использование модуля django-localflavor для валидации полей формы....575
Дополнительные ресурсы....577
Резюме....578
Глава 12. Разработка платформы электронного обучения....579
Настройка проекта электронного обучения....580
Раздача медиафайлов....581
Разработка моделей курса....582
Регистрация моделей на сайте администрирования....584
Использование фикстур с целью предоставления моделям первоначальных данных....585
Создание моделей полиморфного содержимого....588
Использование модельного наследования....589
Абстрактные модели....590
Наследование многотабличной модели....590
Прокси-модели....591
Создание моделей Content....591
Создание конкретно-прикладных модельных полей....594
Добавление упорядочивания в модули и объекты содержимого....596
Добавление представлений аутентификации....600
Добавление системы аутентификации....600
Создание шаблонов аутентификации....601
Дополнительные ресурсы....604
Резюме....605
Глава 13. Создание системы управления контентом....606
Создание CMS....606
Использование примесей для представлений на основе классов....607
Создание представлений на основе классов....607
Работа с группами и разрешениями....610
Ограничение доступа к представлениям, основанным на классах....612
Управление модулями курса и их содержимым....618
Использование наборов форм для модулей курса....618
Добавление содержимого в модули курса....623
Управление модулями и их содержимым....629
Переупорядочивание модулей и их содержимого....634
Использование примесей из модуля django-braces....635
Дополнительные ресурсы....643
Резюме....643
Глава 14. Прорисовка и кеширование контента....644
Отображение курсов....645
Добавление регистрации студентов....650
Создание представления регистрации студентов....651
Зачисление на курсы....653
Доступ к содержимому курсов....657
Прорисовка разных типов содержимого....661
Использование кеш-фреймворка....663
Доступные кеш-бэкенды....664
Установка образа Memcached платформы Docker....665
Установка привязки Python к Memcached....665
Установка резидентного кеш-сервера Memcached....665
Добавление кеш-сервера Memcached в проект....666
Настроечные параметры кеша....666
Использование низкоуровневого API кеша....667
Уровни кеша....667
Проверка запросов к кешу с помощью меню отладочных инструментов Django Debug Toolbar....669
Кеширование на основе динамических данных....673
Кеширование фрагментов шаблона....674
Кеширование представлений....675
Использование сайтового кеша....676
Использование кеш-бэкенда Redis....677
Отслеживание сервера Redis с помощью приложения Django Redisboard....678
Дополнительные ресурсы....680
Резюме....681
Глава 15. Разработка API....682
Разработка RESTful API....683
Установка фреймворка Django REST framework....683
Определение сериализаторов....684
Что такое парсер и рендерер....685
Разработка представлений списка и детальной информации....686
Потребление API....688
Создание вложенных сериализаторов....690
Разработка конкретно-прикладных представлений API....692
Обработка аутентификации....693
Добавление разрешений в представления....694
Создание наборов представлений и маршрутизаторов....696
Добавление дополнительных действий в наборы представлений....698
Сериализация содержимого курса....699
Создание конкретно-прикладных разрешений....699
Потребление RESTful API....702
Дополнительные ресурсы....705
Резюме....706
Глава 16. Разработка чат-сервера....707
Создание приложения для ведения чата....707
Реализация представления чат-комнаты....708
Реально-временной Django на основе Channels....711
Асинхронные приложения с использованием ASGI....712
Цикл запроса/ответа с использованием приложения Channels....712
Установка приложения-обертки Сhannels....714
Написание потребителя....716
Маршрутизация....718
Реализация WebSocket-клиента....719
Активирование канального слоя....725
Каналы и группы....726
Установление канального слоя с использованием Redis....726
Обновление потребителя с целью широковещательной рассылки сообщений....727
Добавление контекста в сообщения....732
Видоизменение потребителя с целью обеспечения полной асинхронности....735
Интеграция приложения для ведения чата с существующими представлениями....737
Дополнительные ресурсы....738
Резюме....739
Глава 17. Выход в прямой эфир....740
Создание производственной среды....741
Управление настроечными параметрами для нескольких сред....741
Настрочные параметры локальной среды....742
Запуск локальной среды....743
Настройки производственной среды....743
Использование инструмента Docker Compose....745
Установка инструмента Docker Compose....745
Создание файла Dockerfile....746
Добавление требующихся пакетов Python....747
Создание файла Compose платформы Docker....748
Конфигурирование службы PostgreSQL....751
Применение миграции базы данных и создание суперпользователя....754
Конфигурирование службы Redis....755
Раздача Django через WSGI и NGINX....756
Использование сервера приложений uWSGI....757
Конфигурирование сервера приложений uWSGI....758
Использование веб-сервера NGINX....759
Конфигурирование веб-сервера NGINX....760
Использование хост-имени....762
Раздача статических и мультимедийных ресурсов....763
Сбор статических файлов....763
Раздача статических файлов с помощью веб-сервера NGINX....764
Обеспечение защиты сайта с помощью SSL/TLS....766
Проверка готовности проекта к работе в производственной среде....766
Конфигурирование проекта Django под SSL/TLS....767
Конфигурирование веб-сервера NGINX под использование SSL/TLS....769
Создание SSL/TLS-сертификата....769
Перенаправление HTTP-трафика на HTTPS....772
Использование Daphne для приложения Django Channels....773
Включение веб-сервера Daphne в конфигурацию веб-сервера NGINX....775
Использование безопасных соединений для веб-сокетов....775
Создание конкретно-прикладных промежуточных программных компонентов....779
Создание поддоменного промежуточного компонента....780
Раздача нескольких поддоменов с помощью веб-сервера NGINX....782
Реализация конкретно-прикладных команд управления....782
Дополнительные ресурсы....785
Резюме....786
Предметный указатель....788
Пустая страница....1
Книга охватывает многообразные аспекты создания веб-приложений с помощью самого популярного веб-фреймворка Django на языке Python. Изучив четыре проекта разной направленности (приложение для ведения блога и электронной коммерции, социальный веб-сайт, платформа электронного обучения), вы получите хорошее представление о том, как работает Django.
Опираясь на изученный материал, вы сможете создавать полнофункциональные веб-приложения на Python с аутентификацией, системами управления контентом, RESTful API и прочими элементами.
Издание предназначено читателям с базовыми знаниями Python, а также программистам, переходящим на Django с других веб-фреймворков. Оно подойдет и тем, кто уже использует Django в своей работе и хочет расширить свои навыки. Для изучения материала необходимы базовый опыт работы с Python и знание HTML и JavaScript.