Введение 15
Язык программирования Python 15
Библиотека Web-программирования Django 16
Некоторые замечания от автора 16
Типографские соглашения 18
Благодарности 19

ЧАСТЬ I. WEB-ПРИЛОЖЕНИЯ. ЯЗЫК PYTHON. БИБЛИОТЕКА DJANGO 21
Глава 1. Введение в серверное Web-программирование
23
Статичные Web-страницы и Web-приложения — две эпохи в развитии Интернета 23
Статичные Web-страницы 23
Web-приложения 25
Базы данных. Реляционные базы данных 28
Что такое реляционная база данных? 28
Что хранит реляционная база данных? 28
Таблицы, поля и записи 28
Индексы и ключи 30
Связи 32
Основные принципы разработки серверных Web-приложений 34
Модели 34
Контроллеры 35
Шаблоны 35
Служебные модули 36
Что дальше? 36
Глава 2. Язык программирования Python
37
Интерактивный интерпретатор Python 37
Основные понятия Python 38
Выражения .. 38
Операторы. Порядок выполнения и приоритет операторов 39
Функции 39
Переменные 40
Типы данных и операции с ними 41
Числа 41
Строки 42
Запись строк 43
Обработка строк 44
Списки 45
Обычные списки 46
Кортежи 47
Словари 47
Присваивание списков. Ссылки 48
Логические величины 49
Запись логических величин 49
Операторы сравнения 49
Логические операторы 51
Значение None 52
Преобразования типов 52
Управление выполнением кода. Управляющие выражения 53
Блоки 53
Условные выражения 53
Циклы 54
Цикл с условием 55
Цикл по списку 55
Дополнительные возможности циклов 55
Функции 56
Объявление функции 56
Локальные переменные 57
Значения параметров по умолчанию. Именованные параметры 58
Функции с произвольным количеством параметров. Необязательные параметры 58
Классы и объекты 60
Основные понятия и приемы работы 60
Объявление классов 62
Наследование классов 63
Стандартные типы Python как объекты 65
Обработка ошибок. Исключения 65
Комментарии 68
Модули. Импорт. Библиотека 68
Модули и пакеты 68
Импорт 69
Стандартная библиотека. Сторонние библиотеки 70
Текстовый редактор Notepad++ 71
Что дальше? 73
Глава 3. Библиотека Django
74
Библиотека Django — зачем она нужна? 74
Основные термины и принципы Django-программирования 75
Проект 75
Приложение 76
Оглавление 5
Привязка интернет-адресов 77
Структура Django-сайта 78
Поддерживаемые форматы баз данных 78
Отладочный Web-сервер Django 79
Что дальше? 79
Глава 4. Создание проекта и приложения Django
80
Создание проекта Django 80
Запуск и останов отладочного Web-сервера 81
Настройка проекта Django 82
Сведения о базе данных 82
Параметры локализации 84
Список активных приложений 85
Синхронизация с базой данных 86
Создание приложения Django 87
Встроенный административный сайт Django 88
Что дальше? 91

ЧАСТЬ II. ВЫВОД ДАННЫХ 93
Глава 5. Модели Django
95
Создание моделей 95
Как создается модель 95
Классы полей для различных типов данных 96
Классы полей для простых типов данных 96
Классы полей для производных типов данных 97
Параметры полей 97
Параметры, применимые для всех типов данных 97
Параметры, специфичные для определенных типов данных 100
Создание связей 101
Методы модели 102
Метаданные модели 104
Структуры, создаваемые Django в базе данных 105
Синхронизация с базой данных: некоторые нюансы 105
Работа с моделью во встроенном административном Web-сайте 106
Извлечение данных из моделей 107
Доступ ко всем записям модели 107
Доступ к полям записи 108
Фильтрация записей 108
Сортировка записей 112
Агрегатные функции 112
Поиск нужной записи 113
Прочие возможности по выборке записей из моделей 114
Что дальше? 115
Глава 6. Контроллеры Django. Регулярные выражения
116
Регулярные выражения 116
Привязка интернет-адресов 119
Привязка к приложениям 119
Привязка к контроллерам приложения 120
Привязка простых интернет-адресов 120
Указание в интернет-адресах параметров, передаваемых контроллеру 121
Создание контроллеров 123
Обработка «ошибки 404» 126
Что дальше? 127
Глава 7. Простые шаблоны Django
128
Что такое шаблон Django? 128
Команды шаблонизатора 129
Переменные шаблона 129
Теги шаблона 130
Теги условных выражений 130
Тег цикла 131
Теги, управляющие выводом 133
Комментарии 134
Фильтры шаблона 135
Рендеринг шаблона 139
Что дальше? 142
Глава 8. Более сложные шаблоны Django
143
Оформление и верстка шаблонов 143
Статичные файлы и их обработка 147
Устранение дублирования кода в шаблонах 149
Наследование шаблонов 149
Подгружаемые шаблоны 151
Шаблоны и статичные файлы уровня проекта 152
Формирование интернет-адресов средствами Django 154
Что дальше? 155
Глава 9. Постраничный вывод данных. Пагинатор Django
156
Инициализация пагинатора 156
Получение заданной страницы списка 157
Формирование гиперссылок для перехода между страницами 160
Возврат на корректную страницу списка 162
Что дальше? 163
Глава 10. Вывод на основе классов. Классы-контроллеры Django
164
Введение в классы-контроллеры 164
Класс-контроллер TemplateView 165
Класс-контроллер списка ListView 168
Класс-контроллер подробных сведений DetailView 172
Вынос общей функциональности в другие классы 174
Классы-контроллеры для вывода по датам 176
Класс-контроллер архива ArchiveIndexView 176
Класс-контроллер вывода по годам YearArchiveView 178
Класс-контроллер вывода по месяцам MonthArchiveView 180
Класс-контроллер вывода по дням DayArchiveView 181
Класс-контроллер вывода по текущей дате TodayArchiveView 182
Что дальше? 183
Оглавление 7

ЧАСТЬ III. ВВОД И ПРАВКА ДАННЫХ 185
Глава 11. Простые формы Django
187
Высокоуровневые классы-контроллеры для добавления, правки и удаления записей 187
Создание шаблонов форм 192
Интерфейс для добавления, правки и удаления записей 195
Формы Django, связанные с моделями 197
Создание формы, связанной с моделью 197
Простой способ 197
Сложный способ 198
Использование формы, связанной с моделью 201
Использование формы в классах-контроллерах, предназначенных для добавления и правки записей 201
Использование формы в классах-контроллерах, предназначенных для вывода данных 201
Использование формы в функциях-контроллерах 204
Обычные формы Django 204
Создание обычных форм 204
Обработка обычных форм 205
Инструменты модели для добавления, правки и удаления записей 206
Что дальше? 208
Глава 12. Более сложные формы Django
209
Сообщения об ошибках и проверка данных 209
Задание сообщений об ошибках 209
Валидаторы и их написание 211
Проверка данных на уровне формы 212
Управление выводом форм на экран 212
Назначение полям формы элементов управления 212
Управление генерированием HTML-кода формы 215
Сообщения Django и их использование 217
Данные сессии 219
Наборы форм. 221
Наборы форм, связанные с моделями 221
Создание наборов форм 221
Вывод наборов форм 223
Сохранение введенных в набор форм данных 224
Реализация переупорядочения и удаления записей посредством набора форм 225
Как набор форм выводится на экран? 227
Вложенные наборы форм 228
Что дальше? 229
Глава 13. Выгрузка файлов на Web-сайт
230
Необходимые настройки сайта 230
Хранение файлов в модели 231
Классы полей для хранения файлов в модели 231
Получение сведений о файлах, хранящихся в модели 232
Выгрузка файлов через формы 233
Поля формы, предназначенные для выгрузки файлов 233
Настройка формы для выгрузки файлов 235
Обработка выгруженных файлов в контроллерах 235
Проверка типа выгруженных файлов 236
Проблема «мусорных» файлов и ее решение 237
Что дальше? 238

ЧАСТЬ IV. РАЗГРАНИЧЕНИЕ ДОСТУПА. КОММЕНТАРИИ. СТАТИЧНЫЕ СТРАНИЦЫ 239
Глава 14. Разграничение доступа
241
Принципы разграничения доступа 241
Настройка проекта для реализации разграничения доступа 242
Список пользователей и групп 243
Реализация входа на сайт 246
Реализация разграничения доступа 248
Проверка, выполнил ли пользователь вход на сайт 248
Проверка, имеет ли пользователь необходимые права 249
Более сложные случаи проверки 250
Выполнение проверки в шаблонах 251
Реализация выхода с сайта 252
Создание дополнительных прав 254
Получение сведений о пользователе 255
Использование модели User 255
Низкоуровневые средства для реализации входа и выхода 256
Что дальше? 258
Глава 15. Комментарии Django
259
Настройка проекта для реализации комментирования 259
Как работает подсистема комментирования Django? 261
Базовые средства для реализации комментирования 262
Вывод стандартной формы для комментирования 262
Вывод стандартного списка комментариев 264
Управление выводом списка комментариев и формы комментирования 265
Управление выводом списка комментариев 265
Управление выводом формы для комментирования 268
Перенаправление после добавления комментария 270
Комментирование только для зарегистрированных пользователей 271
Автомодератор Django и его использование 272
Создание автомодератора 272
Шаблон почтового сообщения 274
Настройка подсистемы отправки почты 275
Инструменты Django для модерирования комментариев 276
Что дальше? 277
Глава 16. Статичные страницы Django
278
Введение в статичные страницы 278
Настройка проекта для реализации статичных страниц 279
Работа со статичными страницами 280
Как указать интернет-адреса статичных файлов и файлов, выгруженных на сайт? 282
Привязка статичных страниц 283
Создание шаблонов для статичных страниц 284
Получение списка статичных страниц в шаблонах 285
Что дальше? 287

ЧАСТЬ V. ДОПОЛНИТЕЛЬНЫЕ БИБЛИОТЕКИ 289
Глава 17. Создание и вывод миниатюр. Библиотека easy-thumbnails
291
Введение в библиотеку easy-thumbnails 291
Настройка проекта 292
Базовые настройки 292
Параметры миниатюр по умолчанию 293
Псевдонимы 295
Вывод миниатюр 296
Вывод на основе псевдонима 296
Вывод с указанием параметров 297
Вывод изображения по умолчанию 298
Что дальше? 298
Глава 18. Привязка тегов к данным. Библиотека django-taggit
299
Введение в теги 299
Введение в библиотеку django-taggit 300
Настройка проекта 301
Добавление тегов к позициям 301
Обработка тегов 303
Поиск по тегам 303
Программное управление тегами 304
Вывод тегов на экран 305
Администрирование списка тегов 305
Что дальше? 307
Библиотека django-precise-bbcode . 308
Как Web-обозреватель форматирует текст при выводе 308
Теги BBCode 309
Библиотека django-precise-bbcode 311
Введение в библиотеку django-precise-bbcode 311
Теги BBCode, поддерживаемые django-precise-bbcode 311
Настройка проекта 313
Базовые настройки 313
Настройки библиотеки django-precise-bbcode 313
Реализация поддержки BBCode 314
Использование класса поля BBCodeTextField 314
Использование тега шаблона bbcode и фильтра bbcode 315
Использование программного форматировщика 316
Какими HTML-тегами заменяются теги BBCode? 316
Создание собственных тегов BBCode 317
Добавление поддержки смайликов 321
Что дальше? 322

ЧАСТЬ VI. СОЗДАНИЕ WEB-САЙТА 323
Глава 20. Планирование и предварительные действия
325
Планирование сайта 325
Основные этапы планирования сайта 325
Логическая структура Web-сайта 327
Физическая структура Web-сайта 328
Средства для администрирования сайта 331
Немного о дизайне сайта 331
Проект сайта «Веник-Торг» 332
Предварительные действия 333
Создание проекта сайта 333
Настройки проекта 334
Начальные привязки 335
Создание страниц входа и выхода 336
Базовые шаблоны 336
Универсальный шаблон формы 337
Собственно шаблоны страниц входа и выхода 338
Оформление 339
Что дальше? 342
Глава 21. Главная страница
343
Приложение и привязка 343
Контроллер 344
Базовый класс CategoryListMixin 344
Собственно контроллер главной страницы 345
Шаблон 345
Базовый шаблон 346
Собственно шаблон страницы 347
Оформление 347
Завершающие действия 349
Что дальше? 350
Глава 22. Гостевая книга
351
Защита от спама 351
Приложение 352
Модель 352
Привязки 353
Форма 353
Контроллер 354
Шаблоны 355
Универсальный шаблон вывода сообщений 355
Универсальный шаблон пагинации 355
Шаблон гостевой книги 356
Оформление 357
Завершающие действия 358
Что дальше? 360
Глава 23. Список новостей. Хранилище изображений
361
Собственно список новостей 361
Приложение 361
Модель 361
Привязки 363
Контроллеры 363
Базовые классы 364
Контроллеры списка новостей и отдельной новости 365
Контроллеры для добавления, правки и удаления новости 365
Шаблоны 367
Шаблон списка новостей 367
Шаблон сведений о выбранной новости 368
Шаблоны добавления, правки и удаления новости 368
Оформление 369
Вывод списка новостей на главной странице 370
Заключительные действия 370
Хранилище изображений 373
Где и как хранить изображения? 373
Приложение 374
Модель 375
Привязки 376
Контроллеры 376
Принципы работы хранилища изображений 376
Контроллер, формирующий список файлов 378
Контроллеры, сохраняющие и удаляющие файл 379
Шаблоны 380
Универсальный шаблон хранилища изображений 380
Исправленные шаблоны добавления и правки новости 381
Оформление 382
Web-сценарий 382
Что дальше? 387
Глава 24. Список категорий товаров
388
Приложение 388
Модель 388
Привязки 389
Контроллер 390
Шаблоны 391
Универсальный шаблон набора форм 391
Шаблон страницы списка категорий 393
Оформление 393
Завершающие действия 394
Что дальше? 395
Глава 25. Список товаров
396
Приложение 396
Модели 397
Привязки 399
Форма 400
Контроллеры 401
Базовые классы 401
Контроллер списка товаров 402
Контроллер сведений о товаре 403
Контроллер добавления товара 404
Контроллер правки товара 406
Контроллер удаления товара 406
Шаблоны 407
Универсальный шаблон списка комментариев 407
Исправленный универсальный шаблон пагинации 408
Шаблон списка товаров 408
Шаблон сведений о товаре 411
Шаблоны добавления, правки и удаления товара 412
Шаблон почтового уведомления 414
Оформление 414
Вывод списка рекомендуемых товаров на главной странице 416
Вывод списка категорий в составе панели навигации 417
Что дальше? 421
Глава 26. Блог
422
Приложение 422
Модель 422
Привязки 424
Форма 425
Контроллеры 425
Базовые классы 426
Контроллер списка статей 427
Контроллер содержимого отдельной статьи 428
Контроллер добавления статьи 428
Контроллер правки статьи 428
Контроллер удаления статьи 430
Шаблоны 431
Исправленный универсальный шаблон пагинации 431
Шаблон списка статей 432
Шаблон отдельной статьи 434
Шаблон добавления статьи 435
Шаблон правки статьи 435
Шаблон удаления статьи 436
Исправленный шаблон почтового уведомления 437
Оформление 437
Заключительные действия 438
Что дальше? 438
Глава 27. Остальные страницы сайта
442
Приложения 442
Привязки 442
Контроллеры 443
Шаблоны 443
Заключительные действия 445
Что дальше? 447

ЧАСТЬ VII. ПРОЧИЕ ВОЗМОЖНОСТИ PYTHON И DJANGO. ПУБЛИКАЦИЯ ГОТОВОГО WEB-САЙТА 449
Глава 28. Генерирование каналов новостей RSS и Atom
451
Простейший генератор каналов новостей 451
Введение в генераторы каналов новостей 451
Создание контроллера-генератора новостей 452
Формирование сведений о самом канале новостей 452
Формирование отдельных позиций канала 454
Вывод гиперссылки на канал новостей 456
Более сложный генератор каналов новостей 457
Одновременное формирование каналов в форматах RSS и Atom 458
Генераторы каналов для сайта «Веник-Торг» 459
Генератор канала новостей сайта 459
Привязки 459
Контроллеры 459
Шаблон 460
Заключительные действия 460
Генератор канала товаров 462
Привязки 462
Контроллеры 462
Шаблоны. 463
Что дальше? 464
Глава 29. Рассылка электронной почты
465
Разовая отправка электронного письма 465
Массовая рассылка электронных писем 467
Отправка письма модераторам и администраторам сайта 468
Система рассылки уведомлений для сайта «Веник-Торг» 469
Модель 469
Контроллеры 470
Контроллер ContactsView 470
Контроллер NewCreate 471
Шаблон 472
Что дальше? 473
Глава 30. Журналирование
474
Отладка Django-сайтов 474
Подсистема журналирования Django 475
Настройки журналирования 476
Вывод в журнал произвольной информации 480
Что дальше? 482
Глава 31. Настройка встроенного административного сайта Django
483
Администратор модели 484
Настройка страниц списков записей 484
Настройки вывода записей 485
Настройки фильтрации и сортировки записей 488
Настройки правки записей 490
Настройка страниц добавления и правки записей 492
Настройка выводимых полей 492
Группировка полей 494
Вывод связанных записей 496
Прочие настройки 499
Что дальше? 500
Глава 32. Публикация Web-сайта
501
Подготовка сайта к публикации 501
Удаление временных и ненужных файлов 501
Правка кода приложений и указание целевого домена 502
Внесение изменений в настройки сайта 503
Создание страниц сообщений об ошибках 505
Публикация сайта 506
Публикация сайта на нашем собственном компьютере 506
Публикация сайта на сервере стороннего хостинг-провайдера 510
Использование баз данных других форматов 510
Использование баз данных MySQL 511
Использование баз данных PostgreSQL 512

Заключение 515

Приложение 1. Установка программной среды языка Python и дополнительных библиотек 517
Установка Python 517
Установка сторонних библиотек 520
Список необходимых библиотек 521
Django 521
Setuptools 521
Pytz 522
Pillow 522
easy-thumbnails 522
django-taggit 522
django-precise-bbcode 522
Psycopg 523
Приложение 2. Описание электронного архива 524
Предметный указатель 525