Опубликовано

Встречайте: “Изучаем Data Science: обработка, исследование, визуализация и моделирование данных с помощью Python”

Изучаем Data Science: обработка, исследование, визуализация и моделирование данных с помощью Python

Практическое руководство по анализу данных, раскрывающее полный цикл работы с информацией: от сбора и обработки до построения моделей машинного обучения. Рассмотрена работа с инструментами pandas и SQL, методы выявления закономерностей и очистки данных. Описаны различные источники информации, включая текстовые, бинарные и веб-данные. Подробно изложены статистические методы: доверительные интервалы, проверка гипотез, конструирование признаков. Приведены практические примеры на языке Python из разных областей: анализ транспортных систем, экологические исследования, ветеринарная аналити-ка. Заключительные разделы посвящены логистической регрессии и оптимизации моделей с применением к задачам классификации текстов.

Для начинающих специалистов в области Data Science , аналитиков данных и широкого круга ИТ-специалистов

Именно такой книги нам не хватало, когда мы впервые ввели термин «data scientist» для описания своей профессии. Если вы планируете заниматься наукой о данных, инженерией данных, искусственным интеллектом или машинным обучением, то вам непременно следует начать с нее.
 Ди Джей Патил, PhD, первый в США ведущий data scientist

Как начинающий специалист в области науки о данных (Data Science), вы понимаете, почему в процессе принятия ключевых решений организации полагаются на данные – будь то компании, занимающиеся разработкой веб-сайтов, местные администрации, работающие над повышением качества муниципальных услуг, или научно-исследовательские институты, борющиеся с распространением заболеваний.

Для этого необходимо освоить навыки преобразования беспорядочных данных в полезную информацию. Это называется жизненным циклом Data Science, который включает в себя процесс сбора, обработки и анализа данных наряду с формированием выводов на их основе.

Перед вами первая книга, в которой рассматриваются базовые навыки программирования и статистики, охватывающие весь жизненный цикл. Она адресована всем желающим работать в области Data Science или любой другой смежной области, а также аналитикам данных, преодолевающим разрыв между техническими и нетехническими областями. Если вы обладаете базовыми знаниями программирования на Python, вы научитесь работать с данными при помощи стандартных инструментов вроде pandas.

Прочитав книгу, вы сможете:

  • сформулировать задачу так, чтобы ее можно было решить с помощью данных;
  • выполнить сбор данных, включая обработку текста, веб-скрапинг  и т.д.;
  • извлекать полезную информацию путем очистки, исследования и визуализации данных;
  • использовать моделирование при описании данных;
  • обобщать результаты, выходящие за рамки данных.

Книгу “Изучаем Data Science: обработка, исследование, визуализация и моделирование данных с помощью Python” можно купить в нашем интенет-магазине.

Отзывы на книгу…………………………………………………………………………………… 13

Предисловие…………………………………………………………………………………………… 14

Требуемые базовые знания……………………………………………………………………………………………………….. 15

Структура книги………………………………………………………………………………………………………………………… 15

Принятые условные обозначения…………………………………………………………………………………………….. 16

Примеры применения кода……………………………………………………………………………………………………….. 16

Онлайн-обучение O’Reilly…………………………………………………………………………………………………………. 17

Наши контакты………………………………………………………………………………………………………………………….. 17

Благодарности…………………………………………………………………………………………………………………………… 18

Часть I. Жизненный цикл Data Science………………………………….. 19

Глава 1. Жизненный цикл Data Science………………………………………………….. 21

Этапы жизненного цикла………………………………………………………………………………………………………….. 21

Примеры жизненного цикла……………………………………………………………………………………………………… 24

Краткие выводы…………………………………………………………………………………………………………………………. 25

Глава 2. Постановка вопроса и охват данных……………………………………….. 26

Большие данные и новые возможности…………………………………………………………………………………… 26

Пример: Google Flu Trends……………………………………………………………………………………………… 27

Целевая совокупность, фрейм доступных данных, выборка…………………………………………………. 29

Пример: что побуждает к активности участников онлайн-сообщества?………………….. 31

Пример: кто победит на выборах?………………………………………………………………………………… 31

Пример: связь экологических угроз со здоровьем человека……………………………………….. 32

Инструменты и протоколы……………………………………………………………………………………………………….. 34

Измерение параметров природных явлений……………………………………………………………………………. 34

Пример: определение содержания CO2 в воздухе……………………………………………………….. 35

Точность……………………………………………………………………………………………………………………………………… 36

Виды смещения……………………………………………………………………………………………………………….. 38

Виды дисперсии……………………………………………………………………………………………………………… 40

Краткие выводы…………………………………………………………………………………………………………………………. 41

Глава 3. Структура данных и моделирование………………………………………… 43

Урновая модель………………………………………………………………………………………………………………………….. 44

Схемы выборки……………………………………………………………………………………………………………….. 46

Выборочное распределение статистики………………………………………………………………………. 48

Моделирование выборочного распределения…………………………………………………………….. 49

Моделирование при помощи гипергеометрического распределения……………………….. 50

Пример: моделирование смещения и дисперсии опросов избирателей……………………………….. 52

Урновая модель опросов в Пенсильвании……………………………………………………………………. 53

Урновая модель со смещением……………………………………………………………………………………… 55

Проведение более масштабных опросов……………………………………………………………………… 56

Пример: моделирование рандомизированного испытания вакцины……………………………………. 58

Охват……………………………………………………………………………………………………………………………….. 58

Урновая модель случайного распределения……………………………………………………………….. 60

Пример: измерение качества воздуха………………………………………………………………………………………. 61

Краткие выводы…………………………………………………………………………………………………………………………. 64

Глава 4. Моделирование при помощи сводной статистики……………………. 66

Константная модель………………………………………………………………………………………………………………….. 66

Минимизация потерь…………………………………………………………………………………………………………………. 68

Средняя абсолютная ошибка………………………………………………………………………………………… 69

Среднеквадратичная ошибка………………………………………………………………………………………… 72

Выбор функции потерь…………………………………………………………………………………………………… 74

Краткие выводы…………………………………………………………………………………………………………………………. 74

Глава 5. Пример из практики: почему мой автобус всегда опаздывает?… 76

Постановка вопроса и охват данных………………………………………………………………………………………. 76

Первичная обработка данных………………………………………………………………………………………………….. 77

Изучение расписания автобусов………………………………………………………………………………………………. 80

Моделирование времени ожидания…………………………………………………………………………………………. 83

Краткие выводы…………………………………………………………………………………………………………………………. 87

Часть II. Табличные данные………………………………………………………. 89

Глава 6. Работа с датафреймами с помощью pandas………………………………. 91

Подмножество……………………………………………………………………………………………………………………………. 92

Охват данных и постановка вопроса……………………………………………………………………………. 92

Датафрейм и индекс……………………………………………………………………………………………………….. 93

Срез………………………………………………………………………………………………………………………………….. 94

Фильтрация строк…………………………………………………………………………………………………………… 98

Пример: когда стало популярным имя Luna?……………………………………………………………. 100

Агрегирование………………………………………………………………………………………………………………………….. 102

Агрегирование и базовая группировка………………………………………………………………………. 103

Пример: использование функции .value_counts()………………………………………………. 104

Группировка по нескольким столбцам………………………………………………………………………. 105

Пользовательские агрегатные функции……………………………………………………………………… 106

Поворот…………………………………………………………………………………………………………………………. 109

Соединение………………………………………………………………………………………………………………………………. 110

Внутренние соединения……………………………………………………………………………………………….. 111

Левые, правые и внешние соединения………………………………………………………………………… 113

Пример: популярность категорий имен из статьи New York Times…………………………… 114

Преобразование……………………………………………………………………………………………………………………….. 116

Метод apply…………………………………………………………………………………………………………………… 117

Пример: популярность имен на букву “L”………………………………………………………………….. 118

Цена метода apply………………………………………………………………………………………………………… 120

Отличие датафрейма от других представлений данных……………………………………………………… 121

Датафрейм и электронная таблица…………………………………………………………………………….. 121

Датафрейм и матрица………………………………………………………………………………………………….. 121

Датафрейм и отношение………………………………………………………………………………………………. 122

Краткие выводы……………………………………………………………………………………………………………………….. 123

Глава 7. Работа с отношениями с помощью SQL………………………………….. 124

Подмножество………………………………………………………………………………………………………………………….. 124

Основы SQL: SELECT и FROM…………………………………………………………………………………….. 125

Что такое отношение?………………………………………………………………………………………………….. 126

Срез………………………………………………………………………………………………………………………………… 126

Фильтрация строк…………………………………………………………………………………………………………. 128

Пример: когда стало популярным имя Luna?……………………………………………………………. 129

Агрегирование………………………………………………………………………………………………………………………….. 131

Базовая группировка и агрегирование с помощью GROUP BY………………………………… 131

Группировка по нескольким столбцам………………………………………………………………………. 132

Другие агрегатные функции………………………………………………………………………………………… 133

Соединение………………………………………………………………………………………………………………………………. 134

Внутренние соединения……………………………………………………………………………………………….. 135

Левые и правые соединения………………………………………………………………………………………… 136

Пример: популярность категорий имен из статьи NYT……………………………………………… 137

Преобразование и обобщенные табличные выражения………………………………………………………. 138

Функции SQL…………………………………………………………………………………………………………………. 139

Многошаговые запросы с использованием оператора WITH…………………………………… 141

Пример: популярность имен на букву “L”………………………………………………………………….. 142

Краткие выводы……………………………………………………………………………………………………………………….. 142

Часть III. Осмысление данных……………………………………………….. 145

Глава 8. Первичная обработка файлов…………………………………………………. 147

Примеры источников данных…………………………………………………………………………………………………. 148

Исследование DAWN……………………………………………………………………………………………………. 148

Безопасность пищевых продуктов в ресторанах Сан-Франциско…………………………… 149

Форматы файлов……………………………………………………………………………………………………………………… 150

Формат с разделителями……………………………………………………………………………………………… 150

Формат с фиксированной шириной…………………………………………………………………………….. 152

Иерархические форматы……………………………………………………………………………………………… 153

Свободно форматированный текст…………………………………………………………………………….. 153

Кодировка файла…………………………………………………………………………………………………………………….. 154

Размер файла……………………………………………………………………………………………………………………………. 156

Командная оболочка и инструменты командной строки…………………………………………………….. 159

Форма и гранулярность таблицы…………………………………………………………………………………………… 163

Гранулярность данных о проверках и нарушениях в ресторанах………………………….. 164

Форма и гранулярность исследования DAWN…………………………………………………………… 166

Краткие выводы……………………………………………………………………………………………………………………….. 168

Глава 9. Первичная обработка датафрейма………………………………………….. 170

Пример: первичная обработка результатов измерений содержания CO2
в обсерватории Мауна-Лоа……………………………………………………………………………………………………. 171

Проверка качества……………………………………………………………………………………………………….. 174

Обработка недостающих данных………………………………………………………………………………. 176

Изменение формы таблицы данных……………………………………………………………………………. 177

Проверка качества данных…………………………………………………………………………………………………….. 178

Качество в плане охвата……………………………………………………………………………………………… 179

Качество измерений и регистрируемых значений…………………………………………………….. 179

Качество в плане связанных признаков……………………………………………………………………… 180

Проверка качества на пригодность к исследованию………………………………………………… 181

Выяснение необходимости в исправлении данных…………………………………………………… 182

Пропущенные значения и записи…………………………………………………………………………………………… 183

Преобразования и временне метки………………………………………………………………………………………. 185

Преобразование временнх меток……………………………………………………………………………… 186

Конвейеризация в преобразованиях…………………………………………………………………………… 188

Изменение структуры………………………………………………………………………………………………………………. 190

Пример: первичная обработка данных о нарушениях правил безопасности в ресторанах 192

Сужение фокуса……………………………………………………………………………………………………………. 193

Агрегирование данных о нарушениях……………………………………………………………………….. 194

Извлечение информации из описания нарушений…………………………………………………….. 196

Краткие выводы……………………………………………………………………………………………………………………….. 199

Глава 10. Разведочный анализ данных………………………………………………… 201

Типы признаков данных………………………………………………………………………………………………………….. 202

Пример: породы собак…………………………………………………………………………………………………. 204

Преобразование качественных признаков…………………………………………………………………. 210

Переразметка категорий……………………………………………………………………………………… 210

Сворачивание категорий…………………………………………………………………………………….. 211

Преобразование количественных значений в порядковые………………………………. 212

Роль типов признаков…………………………………………………………………………………………………… 213

На что обратить внимание в распределении………………………………………………………………………… 214

Что необходимо выяснить во взаимосвязи…………………………………………………………………………….. 218

Два количественных признака……………………………………………………………………………………. 218

Один качественный и один количественный признак……………………………………………….. 219

Два качественных признака………………………………………………………………………………………… 221

Сравнения в многомерных системах……………………………………………………………………………………… 223

Руководящие принципы разведочного анализа……………………………………………………………………. 226

Пример: цены на жилую недвижимость………………………………………………………………………………… 227

Изучение цен…………………………………………………………………………………………………………………. 228

Дальнейшие шаги…………………………………………………………………………………………………………. 230

Изучение прочих признаков………………………………………………………………………………………… 231

Углубленный анализ взаимосвязей…………………………………………………………………………….. 234

Фиксация местоположения………………………………………………………………………………………….. 236

Результаты EDA……………………………………………………………………………………………………………. 238

Краткие выводы……………………………………………………………………………………………………………………….. 239

Глава 11. Визуализация данных…………………………………………………………… 240

Выбор масштаба для выяснения структуры…………………………………………………………………………. 240

Заполнение области данных……………………………………………………………………………………….. 241

Учет нулевого значения……………………………………………………………………………………………….. 242

Выяснение формы данных с помощью преобразований………………………………………….. 244

Кренение для расшифровки взаимосвязей…………………………………………………………………. 246

Выявление взаимосвязей с помощью спрямления……………………………………………………… 247

Сглаживание и агрегирование данных………………………………………………………………………………….. 249

Методы сглаживания для определения формы данных……………………………………………. 250

Методы сглаживания для выявления взаимосвязей и тенденций…………………………….. 252

Настройка методов сглаживания……………………………………………………………………………….. 254

Сведение распределений к квантилям………………………………………………………………………… 255

Случаи, когда сглаживание нежелательно………………………………………………………………… 257

Упрощение значимых сравнений…………………………………………………………………………………………… 259

Подчеркивание важного различия……………………………………………………………………………… 259

Упорядочивание групп………………………………………………………………………………………………… 261

Отказ от стекинга………………………………………………………………………………………………………….. 263

Выбор цветовой палитры…………………………………………………………………………………………….. 265

Принципы проведения сравнений на графиках…………………………………………………………. 266

Учет особенностей исходных данных при визуализации……………………………………………………. 267

Данные, собранные с течением времени……………………………………………………………………. 268

Исследования по данным наблюдений………………………………………………………………………. 269

Неравномерная выборка……………………………………………………………………………………………… 271

Географические данные………………………………………………………………………………………………. 272

Добавление контекста…………………………………………………………………………………………………………….. 273

Пример: результаты 100-метрового спринта…………………………………………………………….. 273

Создание графиков с помощью plotly……………………………………………………………………………………. 275

Объекты Figure и Trace………………………………………………………………………………………………… 276

Изменение макета…………………………………………………………………………………………………………. 277

Функции построения графиков……………………………………………………………………………………. 279

Аннотации к изображению………………………………………………………………………………………….. 281

Другие инструменты визуализации……………………………………………………………………………………….. 282

Matplotlib………………………………………………………………………………………………………………………. 282

Грамматика графики……………………………………………………………………………………………………. 282

Краткие выводы……………………………………………………………………………………………………………………….. 283

Глава 12. Тематическое исследование: проверка точности показателей качества воздуха         285

Постановка вопроса, структура и охват данных…………………………………………………………………. 286

Поиск близко расположенных датчиков……………………………………………………………………………….. 288

Первичная обработка списка локаций AQS………………………………………………………………. 288

Первичная обработка списка локаций PurpleAir……………………………………………………….. 291

Сопоставление датчиков AQS и PurpleAir………………………………………………………………….. 292

Первичная обработка и очистка данных датчиков AQS……………………………………………………… 294

Проверка гранулярности……………………………………………………………………………………………… 295

Удаление ненужных столбцов…………………………………………………………………………………….. 296

Проверка достоверности дат………………………………………………………………………………………. 297

Проверка качества показателей PM2.5………………………………………………………………………. 298

Первичная обработка показаний датчиков PurpleAir…………………………………………………………… 299

Проверка гранулярности……………………………………………………………………………………………… 300

Визуализация временнх меток…………………………………………………………………………. 302

Проверка частоты выборки…………………………………………………………………………………. 303

Обработка пропущенных значений……………………………………………………………………………. 305

Разведочный анализ показаний PurpleAir и AQS…………………………………………………………………… 306

Создание модели для корректировки показаний PurpleAir………………………………………………….. 312

Краткие выводы……………………………………………………………………………………………………………………….. 314

Часть IV. Другие источники данных…………………………………….. 317

Глава 13. Операции с текстом………………………………………………………………. 319

Примеры текстов и заданий……………………………………………………………………………………………………. 319

Преобразование текста в стандартный формат………………………………………………………… 319

Извлечение фрагмента текста для создания признака……………………………………………… 320

Преобразование текста в признаки…………………………………………………………………………….. 320

Анализ текста……………………………………………………………………………………………………………….. 321

Манипуляции со строками……………………………………………………………………………………………………… 322

Преобразование текста в стандартный формат с помощью строковых методов Python           322

Строковые методы в pandas………………………………………………………………………………………… 323

Извлечение фрагментов текста с помощью разделения строк…………………………………. 324

Регулярные выражения……………………………………………………………………………………………………………. 325

Конкатенация литералов…………………………………………………………………………………………….. 325

Классы символов………………………………………………………………………………………………….. 326

Символ подстановки……………………………………………………………………………………………. 327

Инвертированные классы символов…………………………………………………………………… 327

Сокращения классов символов…………………………………………………………………………… 327

Анкоры и границы………………………………………………………………………………………………… 327

Исключение метасимволов………………………………………………………………………………….. 328

Квантификаторы…………………………………………………………………………………………………………… 328

Создание признаков при помощи чередования и группировки……………………………….. 330

Справочные таблицы…………………………………………………………………………………………………… 331

Анализ текста…………………………………………………………………………………………………………………………… 333

Краткие выводы……………………………………………………………………………………………………………………….. 338

Глава 14. Обмен данными……………………………………………………………………. 339

Формат NetCDF………………………………………………………………………………………………………………………… 339

Формат JSON……………………………………………………………………………………………………………………………. 344

HTTP…………………………………………………………………………………………………………………………………………. 348

REST………………………………………………………………………………………………………………………………………….. 352

XML, HTML, XPath………………………………………………………………………………………………………………….. 356

Пример: веб-скрапинг результатов забегов из Википедии……………………………………….. 359

XPath……………………………………………………………………………………………………………………………… 361

Пример: доступ к курсам валют ЕЦБ…………………………………………………………………………. 363

Краткие выводы……………………………………………………………………………………………………………………….. 366

Часть V. Линейное моделирование………………………………………. 369

Глава 15. Линейные модели…………………………………………………………………. 371

Простая линейная модель……………………………………………………………………………………………………….. 372

Пример: простая линейная модель оценки качества воздуха……………………………………………… 375

Интерпретация линейных моделей…………………………………………………………………………….. 377

Оценка качества подгонки…………………………………………………………………………………………… 378

Подгонка простой линейной модели……………………………………………………………………………………… 379

Модель множественной линейной регрессии……………………………………………………………………….. 381

Подбор параметров модели множественной линейной регрессии……………………………………… 386

Пример: где находится страна возможностей?…………………………………………………………………….. 389

Объяснение восходящей мобильности на основе времени в пути на работу…………. 391

Связь восходящей мобильности с использованием нескольких переменных…………. 393

Конструирование признаков для числовых измерений……………………………………………………….. 397

Конструирование признаков для категориальных измерений……………………………………………. 401

Краткие выводы……………………………………………………………………………………………………………………….. 408

Глава 16. Выбор модели……………………………………………………………………….. 410

Переобучение…………………………………………………………………………………………………………………………… 411

Пример: энергопотребление………………………………………………………………………………………… 411

Метод train_test_split………………………………………………………………………………………………………………. 416

Перекрестная проверка…………………………………………………………………………………………………………… 420

Регуляризация………………………………………………………………………………………………………………………….. 425

Смещение и дисперсия модели……………………………………………………………………………………………….. 426

Краткие выводы……………………………………………………………………………………………………………………….. 429

Глава 17. Теория логического вывода и прогнозирования…………………… 431

Распределения: популяционное, эмпирическое, выборочное……………………………………………… 431

Принципы проверки гипотез…………………………………………………………………………………………………… 433

Пример: ранговый критерий сравнения продуктивности соавторов Википедии…… 435

Пример: проверка эффективности вакцины с помощью пропорций………………………… 439

Бутстрап-процедура построения выводов……………………………………………………………………………. 441

Доверительный интервал………………………………………………………………………………………………………… 446

Интервал прогнозирования…………………………………………………………………………………………………….. 449

Пример: прогнозирование опоздания автобуса………………………………………………………… 449

Пример: прогнозирование размера краба………………………………………………………………….. 450

Пример: прогнозирование прироста краба……………………………………………………………….. 451

Вероятность выводов и прогнозов…………………………………………………………………………………………. 454

Формализация теории для статистик средних рангов………………………………………………. 454

Общие свойства случайных величин………………………………………………………………………….. 457

Вероятность в основе интервалов и тестирования……………………………………………………. 459

Вероятность в основе выбора модели………………………………………………………………………… 462

Краткие выводы……………………………………………………………………………………………………………………….. 464

Глава 18. Тематическое исследование: как взвесить осла……………………. 466

Постановка вопроса и охват данных…………………………………………………………………………………….. 466

Первичная обработка и преобразование данных………………………………………………………………… 467

Разведочный анализ данных………………………………………………………………………………………………….. 472

Моделирование веса осла………………………………………………………………………………………………………. 475

Функция потерь при назначении анестетиков…………………………………………………………… 475

Построение простой линейной модели………………………………………………………………………. 476

Подгонка множественной линейной модели……………………………………………………………… 478

Добавление в модель качественных признаков…………………………………………………………. 479

Оценка модели………………………………………………………………………………………………………………. 482

Краткие выводы……………………………………………………………………………………………………………………….. 484

Часть VI. Классификация………………………………………………………….. 487

Глава 19. Классификация…………………………………………………………………….. 489

Пример: поваленные ураганом деревья………………………………………………………………………………… 489

Моделирование и классификация………………………………………………………………………………………….. 492

Константная модель…………………………………………………………………………………………………….. 492

Исследование взаимосвязи между буреломом и размером деревьев………………………. 493

Моделирование долей (и вероятностей)……………………………………………………………………………….. 495

Логистическая модель………………………………………………………………………………………………….. 496

Логарифм отношения шансов……………………………………………………………………………………… 497

Применение логистической кривой…………………………………………………………………………….. 498

Функция потерь для логистической модели………………………………………………………………………….. 499

От вероятностей к классификации…………………………………………………………………………………………. 502

Матрица несоответствий…………………………………………………………………………………………….. 504

Точность и полнота……………………………………………………………………………………………………… 505

Краткие выводы……………………………………………………………………………………………………………………….. 508

Глава 20. Численная оптимизация……………………………………………………….. 509

Основы градиентного спуска………………………………………………………………………………………………….. 510

Минимизация потери Хубера…………………………………………………………………………………………………. 512

Выпуклые и дифференцируемые функции потерь………………………………………………………………… 514

Варианты градиентного спуска……………………………………………………………………………………………… 515

Стохастический градиентный спуск…………………………………………………………………………… 516

Мини-пакетный градиентный спуск…………………………………………………………………………… 517

Метод Ньютона……………………………………………………………………………………………………………. 517

Краткие выводы……………………………………………………………………………………………………………………….. 518

Глава 21. Тематическое исследование: распознавание
фейковых новостей………………………………………………………………………………. 520

Уточнение вопроса и выяснение охвата данных………………………………………………………………….. 521

Получение и “выпас” данных…………………………………………………………………………………………………. 522

Разведочный анализ данных………………………………………………………………………………………………….. 526

Разведочный анализ источников публикаций…………………………………………………………… 527

Разведочный анализ даты публикации………………………………………………………………………. 529

Разведочный анализ слов в статье……………………………………………………………………………… 530

Моделирование……………………………………………………………………………………………………………………….. 532

Однословная модель…………………………………………………………………………………………………….. 532

Многословная модель………………………………………………………………………………………………….. 534

Прогнозирование с помощью преобразования TF-IDF…………………………………………….. 536

Краткие выводы……………………………………………………………………………………………………………………….. 539

Приложение 1. Дополнительный материал…………………………………………… 541

Приложение 2. Источники данных………………………………………………………. 548

Предметный указатель…………………………………………………………………………. 553

Об авторах……………………………………………………………………………………………. 558

Об изображении на обложке………………………………………………………………… 559

Опубликовано

Встречайте: “Django 5. Практика создания веб-сайтов на Python”

Django 5. Практика создания веб-сайтов на Python

Книга посвящена разработке веб-сайтов на языке Python с применением веб-фреймворка Django 5.1. Представлены новинки Django и дано наиболее полное описание его инструментов и средств: моделей, миграций, контролеров, шаблонов, обработки пользовательского ввода, разграничения доступа, посредников, сигналов, отправки электронной почты, локализации, кеширования, работы с базами данных PostgreSQL, поддержке нескольких веб-сайтов, простых страниц, статичных перенаправлений, жетонной аутентификации и др.  Описаны полезные дополнительные библиотеки, реализующие обработку BBCode, CAPTCHA, вывод графических миниатюр, интеграцию с Bootstrap. Рассказано о программировании веб-служб REST, настройке встроенного административного веб-сайта и публикации готового сайта посредством веб-серверов Uvicorn и Apache HTTP Server. Подробно описано создание полнофункционального веб-сайта — электронной доски объявлений.

Электронное приложение-архив на сайте издательства содержит коды всех примеров.

Для веб-программистов

Python и Django — веб-разработка на современном уровне

Что такое веб-фреймворк?

Фреймворк (от англ. framework — каркас) — это программная библиотека, реализующая бОльшую часть типовой функциональности разрабатываемого продукта. То есть в полном смысле слова каркас, на который разработчик конкретного продукта «навешивает» свои узлы, механизмы и детали декора.
Веб-фреймворк — это фреймворк для программирования веб-сайтов. Как правило, он обеспечивает следующую типовую функциональность:

  • взаимодействие с базой данных — посредством единых инструментов, независимых от конкретной СУБД;
  • обработка клиентских запросов — в частности, определение, какая страница запрашивается;
  • генерирование запрашиваемых веб-страниц на основе шаблонов;
  • разграничение доступа — допуск к закрытым страницам только зарегистрированных пользователей и только после выполнения ими входа;
  • обработка данных, занесенных посетителями в веб-формы, — в частности, проверка их на корректность;
  • получение и сохранение файлов, выгруженных пользователями;
  • рассылка электронных писем;
  • кеширование сгенерированных страниц на стороне сервера — для повышения производительности;
  • локализация — перевод сайта на другие языки.

Внимание

Автор предполагает, что читатели этой книги знакомы с языками HTML, CSS, JavaScript, Python, принципами работы СУБД и имеют базовые навыки в веб-разработке. В книге все это описываться не будет.

Django — популярнейший в мире веб-фреймворк, написанный на языке Python, и один из наиболее распространенных веб-фреймворков в мире. Появившись в 2005 году — именно тогда вышла его первая версия, — он до сих пор остается «на коне».

Фреймвок получил название в честь французского джазового гитариста-виртуоза Джанго Рейнхардт (цыг. Django Reinhardt; настоящее имя Жан Ренарт, фр. Jean Reinhardt; 23 января 1910 — 16 мая 1953). Прозвище Рейнхардта «Django» на цыганском языке означает «я проснулся».

Книгу “Django 5. Практика создания веб-сайтов на Python” можно купить в нашем интенет-магазине.

Предисловие…………………………………………………………………………………………… 19

Что такое веб-фреймворк?…………………………………………………………………………………………………………. 19

Почему Django?………………………………………………………………………………………………………………………….. 20

Что нового в Django 5.1 и этой книге?……………………………………………………………………………………… 21

Использованные программные продукты……………………………………………………………………………….. 22

Типографские соглашения………………………………………………………………………………………………………… 22

Часть I. Вводный курс…………………………………………………………………… 25

Глава 1. Основные понятия Django. Вывод данных………………………………. 26

1.1. Установка фреймворка……………………………………………………………………………………………………….. 26

1.2. Проект Django……………………………………………………………………………………………………………………… 27

1.3. Отладочный веб-сервер Django…………………………………………………………………………………………. 28

1.4. Приложения…………………………………………………………………………………………………………………………. 29

1.5. Контроллеры……………………………………………………………………………………………………………………….. 31

1.6. Маршруты и маршрутизатор…………………………………………………………………………………………….. 32

1.7. Модели…………………………………………………………………………………………………………………………………. 35

1.8. Миграции…………………………………………………………………………………………………………………………….. 37

1.9. Консоль Django…………………………………………………………………………………………………………………… 39

1.10. Работа с моделями……………………………………………………………………………………………………………. 39

1.11. Шаблоны……………………………………………………………………………………………………………………………. 43

1.12. Контекст шаблона, рендеринг и сокращения…………………………………………………………………. 44

1.13. Административный веб-сайт Django………………………………………………………………………………. 46

1.14. Параметры полей и моделей……………………………………………………………………………………………. 51

1.15. Редактор модели……………………………………………………………………………………………………………….. 52

Глава 2. Связи. Ввод данных. Статические файлы………………………………… 54

2.1. Связи между моделями……………………………………………………………………………………………………….. 54

2.2. Строковое представление модели…………………………………………………………………………………….. 56

2.3. URL-параметры и параметризованные запросы……………………………………………………………… 57

2.4. Обратное разрешение интернет-адресов………………………………………………………………………….. 61

2.5. Формы, связанные с моделями…………………………………………………………………………………………… 63

2.6. Контроллеры-классы………………………………………………………………………………………………………….. 63

2.7. Наследование шаблонов……………………………………………………………………………………………………. 66

2.8. Статические файлы…………………………………………………………………………………………………………….. 69

Часть II. Базовые инструменты Django………………………………… 73

Глава 3. Создание и настройка проекта…………………………………………………. 74

3.1. Подготовка к работе…………………………………………………………………………………………………………… 74

3.2. Создание проекта Django…………………………………………………………………………………………………… 76

3.3. Настройки проекта……………………………………………………………………………………………………………… 76

3.3.1. Основные настройки…………………………………………………………………………………………………….. 76

3.3.2. Параметры баз данных………………………………………………………………………………………………… 77

3.3.3. Список зарегистрированных приложений………………………………………………………………….. 79

3.3.4. Список зарегистрированных посредников…………………………………………………………………. 80

3.3.5. Языковые настройки…………………………………………………………………………………………………….. 82

3.3.6. Доступ к настройкам проекта из программного кода……………………………………………….. 85

3.3.7. Создание собственных настроек проекта…………………………………………………………………… 85

3.4. Создание, настройка и регистрация приложений……………………………………………………………. 86

3.4.1. Создание приложений………………………………………………………………………………………………….. 86

3.4.2. Настройки приложений………………………………………………………………………………………………… 86

3.4.3. Регистрация приложений в проекте…………………………………………………………………………….. 87

3.5. Средства отладки……………………………………………………………………………………………………………….. 88

3.5.1. Отладочный веб-сервер Django…………………………………………………………………………………… 88

3.5.2. Веб-страница сообщения об ошибке…………………………………………………………………………… 89

3.6. Работа с несколькими базами данных………………………………………………………………………………. 91

3.6.1. Регистрация используемых баз данных……………………………………………………………………… 91

3.6.2. Диспетчеризация данных…………………………………………………………………………………………….. 92

3.6.2.1. Автоматическая диспетчеризация данных……………………………………………………….. 92

3.6.2.2. Указание базы данных в административных командах………………………………….. 95

3.6.2.3. Ручная диспетчеризация данных………………………………………………………………………. 96

Глава 4. Модели: базовые инструменты…………………………………………………. 97

4.1. Объявление моделей…………………………………………………………………………………………………………… 97

4.2. Объявление полей модели………………………………………………………………………………………………….. 98

4.2.1. Параметры, поддерживаемые полями всех типов……………………………………………………… 98

4.2.2. Классы полей моделей……………………………………………………………………………………………….. 101

4.2.3. Создание полей со списком……………………………………………………………………………………….. 105

4.3. Создание связей между моделями…………………………………………………………………………………… 109

4.3.1. Связь «один-со-многими»……………………………………………………………………………………………. 109

4.3.2. Связь «один-с-одним»…………………………………………………………………………………………………. 113

4.3.3. Связь «многие-со-многими»………………………………………………………………………………………… 114

4.4. Параметры самой модели………………………………………………………………………………………………… 116

4.4.1. Получение доступа к параметрам модели из программного кода…………………………. 123

4.5. Интернет-адрес модели и его формирование…………………………………………………………………. 124

4.6. Методы модели…………………………………………………………………………………………………………………. 125

4.7. Валидация модели. Валидаторы…………………………………………………………………………………….. 127

4.7.1. Стандартные валидаторы Django…………………………………………………………………………….. 127

4.7.2. Вывод собственных сообщений об ошибках……………………………………………………………. 132

4.7.3. Написание своих валидаторов………………………………………………………………………………….. 133

4.7.4. Валидация модели………………………………………………………………………………………………………. 134

4.8. Создание моделей на основе существующих баз данных……………………………………………. 136

Глава 5. Миграции……………………………………………………………………………….. 137

5.1. Генерирование миграций…………………………………………………………………………………………………. 137

5.2. Модули миграций……………………………………………………………………………………………………………… 139

5.3. Выполнение миграций……………………………………………………………………………………………………… 139

5.4. Вывод списка миграций……………………………………………………………………………………………………. 141

5.5. Оптимизация миграций…………………………………………………………………………………………………….. 142

5.6. Слияние миграций…………………………………………………………………………………………………………….. 142

5.7. Очистка моделей……………………………………………………………………………………………………………….. 143

5.8. Отмена миграций………………………………………………………………………………………………………………. 144

Глава 6. Запись данных……………………………………………………………………….. 145

6.1. Правка записей………………………………………………………………………………………………………………….. 145

6.2. Создание записей……………………………………………………………………………………………………………… 146

6.3. Занесение значений в поля разных типов………………………………………………………………………. 147

6.4. Сохранение записей…………………………………………………………………………………………………………. 150

6.4.1. Сохранение копий записей в разных базах данных………………………………………………… 151

6.5. Удаление записей……………………………………………………………………………………………………………… 151

6.6. Обработка связанных записей…………………………………………………………………………………………. 152

6.6.1. Обработка связи «один-со-многими»………………………………………………………………………… 152

6.6.2. Обработка связи «один-с-одним»………………………………………………………………………………. 154

6.6.3. Обработка связи «многие-со-многими»…………………………………………………………………….. 155

6.7. Произвольное переупорядочивание записей…………………………………………………………………. 156

6.8. Массовые добавление, правка и удаление записей………………………………………………………. 157

6.9. Выполнение валидации модели………………………………………………………………………………………. 160

6.10. Асинхронная запись данных…………………………………………………………………………………………. 161

Глава 7. Выборка данных…………………………………………………………………….. 162

7.1. Извлечение значений из полей записи…………………………………………………………………………….. 162

7.1.1. Извлечение значений из полей разных типов…………………………………………………………… 162

7.2. Доступ к связанным записям……………………………………………………………………………………………. 163

7.3. Выборка записей………………………………………………………………………………………………………………. 165

7.3.1. Выборка всех записей………………………………………………………………………………………………… 165

7.3.2. Извлечение одной записи…………………………………………………………………………………………… 166

7.3.3. Получение числа записей в наборе…………………………………………………………………………… 167

7.3.4. Поиск записи……………………………………………………………………………………………………………….. 168

7.3.5. Фильтрация записей……………………………………………………………………………………………………. 169

7.3.6. Написание условий фильтрации……………………………………………………………………………….. 170

7.3.6.1. Написание условий фильтрации по значениям полей связанных записей….. 173

7.3.6.2. Написание условий фильтрации по значениям полей типа JSON………………… 174

7.3.6.3. Сравнение со значениями других полей. Функциональные выражения……… 176

7.3.6.4. Сложные условия фильтрации. Выражения сравнения…………………………………. 177

7.3.7. Выборка уникальных записей…………………………………………………………………………………… 179

7.3.8. Выборка указанного числа записей………………………………………………………………………….. 179

7.3.9. Экономная выборка записей……………………………………………………………………………………… 179

7.4. Сортировка записей………………………………………………………………………………………………………….. 180

7.5. Агрегатные вычисления……………………………………………………………………………………………………. 182

7.5.1. Агрегатные вычисления по всем записям набора……………………………………………………. 182

7.5.2. Агрегатные вычисления по связанным записям……………………………………………………….. 183

7.5.3. Агрегатные функции…………………………………………………………………………………………………… 185

7.6. Оконные вычисления………………………………………………………………………………………………………… 187

7.6.1. Выполнение оконных вычислений……………………………………………………………………………. 187

7.6.2. Использование кадров………………………………………………………………………………………………… 191

7.6.3. Оконные функции………………………………………………………………………………………………………… 194

7.7. Вычисляемые поля уровня запроса………………………………………………………………………………… 196

7.8. Функциональные выражения: расширенные инструменты………………………………………….. 197

7.8.1. Функции СУБД……………………………………………………………………………………………………………. 197

7.8.1.1. Функции для работы со строками……………………………………………………………………. 197

7.8.1.2. Функции для работы с числами……………………………………………………………………….. 200

7.8.1.3. Функции для работы с датой и временем……………………………………………………….. 202

7.8.1.4. Функции для сравнения и преобразования значений…………………………………….. 204

7.8.2. Условные выражения СУБД………………………………………………………………………………………. 206

7.8.3. Вложенные запросы……………………………………………………………………………………………………. 207

7.8.4. Извлечение значений из полей типа JSON………………………………………………………………… 208

7.9. Объединение наборов записей………………………………………………………………………………………… 209

7.10. Извлечение значений только из заданных полей…………………………………………………………. 210

7.11. Указание базы данных для выборки записей………………………………………………………………. 213

7.12. Асинхронная выборка данных………………………………………………………………………………………. 213

Глава 8. Маршрутизация……………………………………………………………………… 215

8.1. Как работает маршрутизатор?……………………………………………………………………………………….. 215

8.1.1. Списки маршрутов уровня проекта и уровня приложения……………………………………… 216

8.2. Объявление маршрутов……………………………………………………………………………………………………. 217

8.3. Передача данных в контроллеры……………………………………………………………………………………. 219

8.4. Именованные маршруты………………………………………………………………………………………………….. 220

8.5. Имена приложений……………………………………………………………………………………………………………. 220

8.6. Псевдонимы приложений…………………………………………………………………………………………………. 221

8.7. Указание шаблонных путей в виде регулярных выражений………………………………………… 222

8.8. Настройки маршрутизатора……………………………………………………………………………………………. 223

Глава 9. Контроллеры-функции…………………………………………………………… 224

9.1. Написание контроллеров-функций…………………………………………………………………………………. 224

9.1.1. Контроллеры, выполняющие одну задачу……………………………………………………………….. 225

9.1.2. Контроллеры, выполняющие несколько задач………………………………………………………… 226

9.2. Получение сведений о запросе………………………………………………………………………………………… 227

9.3. Формирование ответа………………………………………………………………………………………………………. 230

9.3.1. Низкоуровневые средства для формирования ответа……………………………………………… 230

9.3.2. Формирование ответа на основе шаблона……………………………………………………………….. 231

9.3.3. Класс TemplateResponse: отложенный рендеринг шаблонов…………………………………. 233

9.4. Перенаправление………………………………………………………………………………………………………………. 234

9.5. Обратное разрешение интернет-адресов……………………………………………………………………….. 235

9.6. Уведомление об ошибках и особых ситуациях……………………………………………………………… 237

9.7. Специальные ответы………………………………………………………………………………………………………… 238

9.7.1. Потоковый ответ…………………………………………………………………………………………………………. 238

9.7.2. Файловый ответ…………………………………………………………………………………………………………… 239

9.7.3. JSON-ответ…………………………………………………………………………………………………………………… 240

9.8. Сокращения Django………………………………………………………………………………………………………….. 240

9.9. Программное разрешение интернет-адресов…………………………………………………………………. 242

9.10. Дополнительные настройки контроллеров………………………………………………………………….. 243

9.11. Асинхронные контроллеры-функции……………………………………………………………………………. 244

9.11.1. Преобразование синхронных функций в асинхронные и наоборот…………………….. 245

9.11.2. Обработка прерываний……………………………………………………………………………………………. 247

9.12. Асинхронные инструменты для формирования ответов…………………………………………….. 247

Глава 10. Контроллеры-классы……………………………………………………………. 249

10.1. Введение в контроллеры-классы…………………………………………………………………………………… 249

10.2. Базовые контроллеры-классы……………………………………………………………………………………….. 250

10.2.1. Контроллер View: диспетчеризация по HTTP-методу…………………………………………… 250

10.2.2. Примесь ContextMixin: создание контекста шаблона…………………………………………… 252

10.2.3. Примесь TemplateResponseMixin: рендеринг шаблона………………………………………….. 252

10.2.4. Контроллер TemplateView: все вместе…………………………………………………………………….. 253

10.3. Классы, выводящие одну запись…………………………………………………………………………………… 254

10.3.1. Примесь SingleObjectMixin: поиск записи………………………………………………………………. 254

10.3.2. Примесь SingleObjectTemplateResponseMixin: рендеринг шаблона
на основе найденной записи………………………………………………………………………………………………… 255

10.3.3. Контроллер DetailView: все вместе…………………………………………………………………………. 256

10.4. Классы, выводящие наборы записей…………………………………………………………………………….. 257

10.4.1. Примесь MultipleObjectMixin: извлечение набора записей………………………………….. 258

10.4.2. Примесь MultipleObjectTemplateResponseMixin: рендеринг шаблона
на основе набора записей……………………………………………………………………………………………………. 260

10.4.3. Контроллер ListView: все вместе……………………………………………………………………………… 261

10.5. Классы, работающие с формами…………………………………………………………………………………… 261

10.5.1. Классы для вывода и валидации форм…………………………………………………………………… 262

10.5.1.1. Примесь FormMixin: создание формы…………………………………………………………… 262

10.5.1.2. Контроллер ProcessFormView: вывод и обработка формы…………………………. 263

10.5.1.3. Контроллер-класс FormView: создание, вывод и обработка формы………….. 264

10.5.2. Классы для добавления, правки и удаления записей……………………………………………. 265

10.5.2.1. Примесь ModelFormMixin: создание формы, связанной с моделью…………… 265

10.5.2.2. Контроллер CreateView: создание новой записи…………………………………………. 266

10.5.2.3. Контроллер UpdateView: исправление записи…………………………………………….. 267

10.5.2.4. Примесь DeletionMixin: удаление записи……………………………………………………… 268

10.5.2.5. Контроллер DeleteView: удаление записи с подтверждением……………………. 268

10.6. Классы для вывода хронологических списков…………………………………………………………….. 270

10.6.1. Вывод последних записей………………………………………………………………………………………… 270

10.6.1.1. Примесь DateMixin: фильтрация записей по дате………………………………………… 270

10.6.1.2. Контроллер BaseDateListView: базовый класс…………………………………………….. 271

10.6.1.3. Контроллер ArchiveIndexView: вывод последних записей………………………….. 272

10.6.2. Вывод записей по годам…………………………………………………………………………………………… 273

10.6.2.1. Примесь YearMixin: извлечение года…………………………………………………………….. 273

10.6.2.2. Контроллер YearArchiveView: вывод записей за год……………………………………. 274

10.6.3. Вывод записей по месяцам………………………………………………………………………………………. 275

10.6.3.1. Примесь MonthMixin: извлечение месяца……………………………………………………… 275

10.6.3.2. Контроллер MonthArchiveView: вывод записей за месяц……………………………. 275

10.6.4. Вывод записей по неделям……………………………………………………………………………………….. 276

10.6.4.1. Примесь WeekMixin: извлечение номера недели………………………………………….. 276

10.6.4.2. Контроллер WeekArchiveView: вывод записей за неделю…………………………… 277

10.6.5. Вывод записей по дням…………………………………………………………………………………………….. 277

10.6.5.1. Примесь DayMixin: извлечение заданного числа…………………………………………. 278

10.6.5.2. Контроллер DayArchiveView: вывод записей за день………………………………….. 278

10.6.6. Контроллер TodayArchiveView: вывод записей за текущее число……………………….. 279

10.6.7. Контроллер DateDetailView: вывод одной записи за указанное число……………….. 279

10.7. Контроллер RedirectView: перенаправление……………………………………………………………….. 280

10.8. Контроллеры-классы смешанной функциональности………………………………………………… 282

10.9. Асинхронные контроллеры-классы………………………………………………………………………………. 283

Глава 11. Шаблоны и статические файлы: базовые инструменты……….. 285

11.1. Настройки проекта, касающиеся шаблонов………………………………………………………………… 285

11.2. Вывод данных. Директивы…………………………………………………………………………………………….. 290

11.3. Теги шаблонизатора………………………………………………………………………………………………………. 291

11.4. Фильтры…………………………………………………………………………………………………………………………… 300

11.5. Наследование шаблонов……………………………………………………………………………………………….. 310

11.6. Включение шаблонов…………………………………………………………………………………………………….. 312

11.7. Обработка статических файлов…………………………………………………………………………………….. 312

11.7.1. Настройка подсистемы статических файлов…………………………………………………………. 312

11.7.2. Формирование интернет-адресов статических файлов………………………………………… 314

11.8. Вывод значений в «человеческом» представлении……………………………………………………… 316

Глава 12. Пагинатор…………………………………………………………………………….. 318

12.1. Класс Paginator: сам пагинатор. Создание пагинатора…………………………………………….. 318

12.2. Класс Page: часть пагинатора. Вывод пагинатора…………………………………………………….. 321

Глава 13. Формы, связанные с моделями……………………………………………… 323

13.1. Создание форм, связанных с моделями………………………………………………………………………… 323

13.1.1. Создание форм с помощью фабрики классов…………………………………………………………. 323

13.1.2. Создание форм путем быстрого объявления………………………………………………………….. 326

13.1.3. Создание форм путем полного объявления……………………………………………………………. 327

13.1.3.1. Как выполняется полное объявление?………………………………………………………….. 327

13.1.3.2. Параметры, поддерживаемые всеми типами полей формы………………………… 329

13.1.3.3. Классы полей форм…………………………………………………………………………………………. 330

13.1.3.4. Классы полей форм, применяемые по умолчанию………………………………………. 334

13.1.4. Задание элементов управления……………………………………………………………………………….. 335

13.1.4.1. Классы элементов управления………………………………………………………………………. 335

13.1.4.2. Элементы управления, применяемые по умолчанию………………………………….. 338

13.2. Обработка форм……………………………………………………………………………………………………………… 339

13.2.1. Добавление записи посредством формы………………………………………………………………… 339

13.2.1.1. Создание формы для добавления записи……………………………………………………… 339

13.2.1.2. Повторное создание формы……………………………………………………………………………. 339

13.2.1.3. Валидация данных, занесенных в форму……………………………………………………… 340

13.2.1.4. Сохранение данных, занесенных в форму……………………………………………………. 341

13.2.1.5. Доступ к данным, занесенным в форму…………………………………………………………. 342

13.2.2. Правка записи посредством формы………………………………………………………………………… 342

13.2.3. Некоторые соображения касательно удаления записей………………………………………. 343

13.3. Вывод форм на экран……………………………………………………………………………………………………… 344

13.3.1. Быстрый вывод форм………………………………………………………………………………………………… 344

13.3.2. Расширенный вывод форм……………………………………………………………………………………….. 346

13.3.2.1. Расширенный вывод форм: высокоуровневые инструменты………………………. 346

13.3.2.2. Расширенный вывод форм: низкоуровневые инструменты…………………………. 347

13.4. Валидация в формах………………………………………………………………………………………………………. 350

13.4.1. Валидация полей формы………………………………………………………………………………………….. 350

13.4.1.1. Валидация с применением валидаторов………………………………………………………. 350

13.4.1.2. Валидация путем переопределения методов формы…………………………………… 351

13.4.2. Валидация формы…………………………………………………………………………………………………….. 351

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

Опубликовано

Новинка: “Мастер веб-разработки на Python, Django и Bootstrap”

Мастер веб-разработки на Python, Django и Bootstrap

Книга представляет собой практическое руководство по интеграции фреймворка Bootstrap 5 с шаблонами Django для разработки на языке Python современных и динамичных веб-приложений. Рассматриваются основы макетирования HTML-страниц, создание статичных элементов (кнопки, панели, модальные окна, аккордеоны) и разработка динамичных компонентов, управляемых через административную панель Django или интерфейс личного кабинета администратора. Описаны технологии работы с древовидными структурами, создание модальных окон с использованием библиотеки HTMX, а также базовые модули для разработки интернет-магазина, включая корзину, заказы и оплату. Приведены полезные советы по работе с файлами PDF, анимацией, переводами на другие языки и почтовыми сообщениями. Отдельное внимание уделено визуализации данных с помощью библиотек Plotly.py и Plotly.js для создания интерактивных 2D- и 3D-графиков.
Книга имеет интерактивный цифровой аналог, позволяющий запускать на выполнение программные модули всех примеров, скачивать листинги программ, озвучивать текст и переводить его на различные языки, а также смотреть цветные иллюстрации.

Для программистов

ЭФФЕКТИВНЫЙ СОВРЕМЕННЫЙ ИНСТРУМЕНТАРИЙ ДЛЯ СОЗДАНИЯ ВЕБ-ПРИЛОЖЕНИЙ

  • Макетирование HTML страниц с использованием новых элементов Bootstrap
  • Модальные окна в шаблонах Django и на основе библиотеки HTMX
  • Динамичные элементы Bootstrap в шаблонах Django
  • Древовидные структуры пользовательского интерфейса с библиотекой Django-MPTT
  • Интернет-магазин с управлением каталогом продуктов и сменой интерфейса без изменения программного кода
  • Статичные и интерактивные 2D- и 3D-графики с библиотекой Plotly.py
  • Анимированные 2D- и 3D-графики с библиотекой Plotly.js

Книгу “Мастер веб-разработки на Python, Django и Bootstrap” можно приобрести в нашем интернет-магазине.

Предисловие…………………………………………………………………………………………… 11

Структура книги………………………………………………………………………………………………………………………… 12

О примерах кода……………………………………………………………………………………………………………………….. 14

Глава 1. Макетирование HTML-страниц с фреймворком Bootstrap 5…….. 15

1.1. Что нового в Bootstrap 5?……………………………………………………………………………………………………. 16

1.1.1. Наиболее важные изменения…………………………………………………………………………………… 16

Библиотека jQuery больше не является зависимостью…………………………………………. 16

Изменение поддержки браузеров……………………………………………………………………………. 17

Изменение атрибутов данных…………………………………………………………………………………. 17

Что было удалено?…………………………………………………………………………………………………… 18

1.1.2. Наиболее важные дополнения………………………………………………………………………………… 19

Адаптивные размеры шрифтов теперь включены по умолчанию……………………….. 19

Поддержка написания справа налево……………………………………………………………………. 19

Новая точка останова……………………………………………………………………………………………… 19

Темная и светлая тема……………………………………………………………………………………………… 19

Создание модальных окон через атрибуты данных…………………………………………….. 20

1.1.3. Новые компоненты……………………………………………………………………………………………………. 20

Аккордеон…………………………………………………………………………………………………………………. 20

Offcanvas……………………………………………………………………………………………………………………. 20

Плавающая этикетка……………………………………………………………………………………………….. 20

1.1.4. Прочие улучшения и изменения………………………………………………………………………………. 20

1.2. Получение файлов фреймворка Bootstrap………………………………………………………………………… 21

1.2.1. Использование сети CDN…………………………………………………………………………………………. 22

1.2.2. Скачивание файлов Bootstrap………………………………………………………………………………….. 24

1.3. Контейнеры и сетка Bootstrap……………………………………………………………………………………………. 24

1.3.1. Адаптивные контейнеры………………………………………………………………………………………….. 25

Адаптивно-фиксированный контейнер…………………………………………………………………… 26

Адаптивно-подвижный, или «резиновый», контейнер…………………………………………… 27

1.3.2. Ряды, или строки (row)……………………………………………………………………………………………… 27

1.3.3. Адаптивные блоки (col)……………………………………………………………………………………………. 28

1.3.4. Адаптивные блоки без указания числа колонок……………………………………………………. 29

1.3.5. Расположение адаптивных блоков…………………………………………………………………………. 30

1.4. Верстка макета HTML-страниц………………………………………………………………………………………… 30

1.4.1. Выравнивание адаптивных блоков…………………………………………………………………………. 31

Вертикальное выравнивание адаптивных блоков………………………………………………… 31

Горизонтальное выравнивание адаптивных блоков…………………………………………….. 31

1.4.2. Смещение адаптивных блоков………………………………………………………………………………… 32

Смещение с помощью классов offset………………………………………………………………………. 32

Смещение с помощью классов margin……………………………………………………………………. 33

1.5. Простейшая HTML-страница с подключением фреймворка Bootstrap…………………………. 36

1.6. Задание цвета элементам HTML-страниц……………………………………………………………………….. 38

1.7. Задание отступов элементам макета HTML-страниц…………………………………………………….. 41

1.8. Выравнивание содержимого в адаптивных блоках HTML-страниц……………………………… 45

1.9. Обозначение границ элементов макета HTML-страниц…………………………………………………. 47

1.10. Пример использования адаптивных контейнеров…………………………………………………………. 53

1.11. Таблицы Bootstrap……………………………………………………………………………………………………………. 56

1.12. Адаптивные таблицы в Bootstrap (с полосами прокрутки)…………………………………………… 64

1.13. Краткие итоги……………………………………………………………………………………………………………………. 69

Глава 2. Статичные элементы Bootstrap в шаблонах Django………………….. 71

2.1. Задание произвольного цвета элементам Bootstrap………………………………………………………… 71

2.2. Тег include для встраивания шаблонов Django………………………………………………………………… 75

2.3. Подключение значков к элементам Bootstrap………………………………………………………………….. 77

2.4. Разделение страницы на вкладки компонентом Tabs………………………………………………………. 81

2.4.1. Традиционные горизонтальные вкладки Tabs фреймворка Bootstrap…………………. 81

2.4.2. Традиционные вертикальные вкладки Tabs фреймворка Bootstrap…………………….. 85

2.4.3. Горизонтальные вкладки Tabs с использованием тега Django
для организации циклов…………………………………………………………………………………………………….. 88

2.4.4. Вертикальные кнопки для навигации по вкладкам Tabs фреймворка
Bootstrap………………………………………………………………………………………………………………………………. 90

2.5. Компонент Bootstrap Ofcanvas…………………………………………………………………………………………… 92

2.6. Компонент для выдачи подсказок Tooltip………………………………………………………………………… 97

2.7. Использование атрибута href в шаблонах Django для создания ссылок
на URL-адреса…………………………………………………………………………………………………………………….. 98

2.7.1. Ссылки на внешние URL-адреса……………………………………………………………………………… 99

2.7.2. Ссылки на внутренние URL-адреса………………………………………………………………………. 101

2.7.3. Ссылки на внутренние динамичные URL-адреса………………………………………………… 103

2.7.4. Использование атрибута href для обмена параметрами между шаблонами и представлениями     108

2.8. Всплывающие модальные окна………………………………………………………………………………………. 115

2.8.1. Простое модальное окно………………………………………………………………………………………… 119

2.8.2. Модальное окно с полосой прокрутки…………………………………………………………………. 121

2.8.3. Широкое модальное окно………………………………………………………………………………………. 124

2.9. Компонент Bootstrap Accordion («Аккордеон»)……………………………………………………………… 126

2.9.1. Класс accordion………………………………………………………………………………………………………. 126

2.9.2. Класс accordion-flush……………………………………………………………………………………………… 130

2.10. Компонент Bootstrap card («Карточки»)………………………………………………………………………. 134

2.10.1. Карточка с параметрами по умолчанию……………………………………………………………. 134

2.10.2. Карточка с параметрами цвета…………………………………………………………………………… 135

2.10.3. Группы карточек…………………………………………………………………………………………………… 138

2.11. Компонент Bootstrap Carousel («Карусель»)……………………………………………………………….. 140

2.11.1. Статичная карусель с фиксированным контентом……………………………………………. 140

2.12. Краткие итоги………………………………………………………………………………………………………………….. 145

Глава 3. Динамичные элементы Bootstrap в шаблонах Django……………… 147

3.1. Динамичный «Аккордеон» с заполнением вкладок через административную
панель Django……………………………………………………………………………………………………………………. 147

3.2. Динамичный аккордеон с заполнением вкладок через интерфейс пользователя……….. 151

3.2.1. Программные модули для создания динамичных элементов «Аккордеон»………. 156

3.2.2. Модули для вывода динамичных аккордеонов на страницы сайта………………….. 168

3.2.3. Пример создания динамичного аккордеона через интерфейс пользователя…….. 174

3.2.4. Пример вывода динамичного аккордеона на страницу сайта…………………………… 177

3.3. Динамичные карточки с заполнением контента через административную панель…… 181

3.4. Динамичные карточки с заполнением контента через интерфейс пользователя……….. 186

3.4.1. Программные модули для создания динамичных карточек……………………………….. 190

3.4.2. Пример формирования динамичных карточек через интерфейс пользователя… 198

3.4.3. Модули для вывода динамичных карточек на страницы сайта………………………… 200

3.4.4. Пример отображения динамичных карточек на страницах сайта…………………….. 205

3.5. Динамичная карусель с заполнением контента через административную панель……. 207

3.6. Динамичная карусель с заполнением контента через интерфейс пользователя………… 212

3.6.1. Программные модули для создания слайдов динамичной карусели………………… 214

3.6.2. Пример формирования слайдов динамичной карусели через интерфейс пользователя      221

3.6.3. Модули для вывода динамичных каруселей на страницы сайта………………………. 222

3.6.4. Примеры отображения динамичных каруселей на страницах сайта……………….. 225

3.7. Краткие итоги……………………………………………………………………………………………………………………. 226

Глава 4. Древовидные структуры в шаблонах Django………………………….. 227

4.1. Использование Django-mptt для создания древовидных структур………………………………. 227

4.2. Формирование дерева категорий продуктов с использованием административной панели Django           231

4.2.1. Отображение статичного дерева категорий продуктов в шаблонах Django……. 233

4.2.2. Отображение динамичного дерева категорий продуктов в шаблонах Django…. 236

4.3. Формирование дерева категорий продуктов с использованием интерфейса пользователя           239

4.3.1. Модель для категорий продуктов…………………………………………………………………………. 240

4.3.2. Модули для отображения дерева категорий продуктов…………………………………….. 241

4.3.3. Модули для добавления корня к дереву категорий продуктов………………………….. 245

4.3.4. Модули для добавления дочерних категорий продуктов…………………………………… 249

4.3.5. Модули для обновления категорий продуктов……………………………………………………. 255

4.3.6. Модули для удаления категорий продуктов………………………………………………………… 256

4.4. Создание списков объектов с фильтрацией через древовидные каталоги………………….. 258

4.4.1. Модель для хранения категорий продуктов………………………………………………………… 258

4.4.2. Модель для хранения сведений о продуктах……………………………………………………….. 260

4.4.3. Форма для ввода сведений о продуктах……………………………………………………………….. 262

4.4.4. Редактор продуктов………………………………………………………………………………………………… 262

4.4.5. Модули для добавления в БД продуктов (товара)………………………………………………. 268

4.4.6. Модули для обновления сведений о продуктах…………………………………………………… 271

4.4.7. Модули для удаления продукта из БД…………………………………………………………………. 273

4.4.8. Модули для показа подробностей о продуктах………………………………………………….. 274

4.5. Фильтрация сведений о продуктах с использованием статичного древовидного каталога категорий продуктов 276

4.6. Фильтрация сведений о продуктах с использованием динамичного древовидного каталога категорий продуктов     284

4.7. Создание древовидных меню с использованием плагина megamenu-js……………………… 293

4.7.1. Плагин megamenu-js: подготовка к работе………………………………………………………….. 293

4.7.2. Создание мегаменю на основе плагина megamenu-js…………………………………………. 295

4.8. Фильтрация продуктов с использованием панели инструментов и древовидного каталога категорий     300

4.9. Краткие итоги……………………………………………………………………………………………………………………. 314

Глава 5. Библиотека HTMX: модальные окна для ввода
и корректировки данных……………………………………………………………………… 315

5.1. Библиотека HTMX……………………………………………………………………………………………………………. 315

5.2. Ввод и редактирования сведений о клиентах сайта с модальными окнами
на основе библиотеки HTMX…………………………………………………………………………………………… 317

5.2.1. Модель и форма для ввода данных………………………………………………………………………. 317

5.2.2. Модули для создания редактора списка клиентов……………………………………………… 319

5.2.3. Модули для добавления клиентов в БД………………………………………………………………… 325

5.2.4. Программируем кнопку Изменить — для корректировки в БД сведений о клиентах……….. 327

5.2.5. Программируем кнопку Удалить — для удаления из БД сведений
о клиентах…………………………………………………………………………………………………………………………. 328

5.2.6. Программируем модули для показа подробных сведений о клиентах……………… 330

5.2.7. Испытание программных модулей для редактирования сведений
о клиентах в модальных окнах……………………………………………………………………………………….. 332

5.3. Краткие итоги……………………………………………………………………………………………………………………. 338

Глава 6. Интернет-магазин…………………………………………………………………… 339

6.1. Обмен данными между представлениями и шаблонами……………………………………………….. 340

6.1.1. Обмен данными через сессии…………………………………………………………………………………. 340

6.1.2. Обмен данными через контекстный процессор……………………………………………………. 341

6.2. Модели для корзины и заказов клиентов магазина электронной торговли………………… 342

6.3. Контекстный процессор для магазина электронной торговли…………………………………….. 344

6.4. Создаем магазин пользователя……………………………………………………………………………………….. 347

6.4.1. Вывод категорий продуктов в левой боковой панели магазина
(дерево свернуто)……………………………………………………………………………………………………………… 350

6.4.2. Проверка работы модулей магазина пользователя с фильтрацией данных по свернутому дереву категорий продуктов………………………………………………………………………………………………………………………….. 357

6.4.3. Вывод категорий продуктов в левой боковой панели магазина
(дерево раскрыто)…………………………………………………………………………………………………………….. 361

6.4.4. Проверка работы модулей магазина пользователя с фильтрацией данных по раскрытому дереву категорий продуктов………………………………………………………………………………………………………………………….. 364

6.4.5. Вывод категорий продуктов в центральной панели в виде мегаменю………………. 368

6.4.6. Проверка работы модулей магазина пользователя с фильтрацией данных по дереву категорий продуктов в виде мегаменю…………………………………………………………………………………………………………………………… 371

6.5. Модули формирования корзины (предварительного заказа)……………………………………….. 375

6.5.1. Добавление продуктов (товаров) в корзину…………………………………………………………. 375

6.5.2. Вывод содержимого корзины (предварительного заказа)………………………………….. 378

6.5.3. Корректировка количества товара в корзине………………………………………………………. 382

6.5.4. Удаление товара из корзины…………………………………………………………………………………. 387

6.5.5. Формирование заказа для оплаты на основе набора продуктов,
помещенных в корзину…………………………………………………………………………………………………….. 389

6.5.6. Удаление корзины или активного заказа……………………………………………………………… 395

6.5.7. Проверка работы модулей для перевода корзины в предварительный заказ…… 397

6.5.8. Интеграция интернет-магазина с платежной платформой Robokassa………………. 402

6.5.9. Обработка сбоя оплаты заказа пластиковой картой………………………………………….. 406

6.5.10. Обработка успешной оплаты заказа банковской картой…………………………………. 407

6.5.11. Обработка реальной оплаты заказа банковской картой на платежной платформе Robokassa     409

6.6. Проверка работы модулей оплаты предварительного заказа……………………………………… 410

6.7. Модули для показа оплаченных заказов (покупок)………………………………………………………. 414

6.8. Проверка работы модулей для показа оплаченных заказов (покупок)……………………….. 418

6.9. Краткие итоги……………………………………………………………………………………………………………………. 420

Глава 7. Полезные советы……………………………………………………………………. 421

7.1. Показываем на сайте документ PDF……………………………………………………………………………….. 421

7.1.1. Создание документа в формате PDF……………………………………………………………………… 422

7.1.2. Вывод документа формата PDF из представления………………………………………………. 424

7.1.3. Вывод документа формата PDF из шаблона Django…………………………………………… 426

7.1.4. Вывод PDF-документа в формате флеш-анимации……………………………………………… 428

7.2. Переводим страницы сайта на другие языки…………………………………………………………………. 434

7.3. Отправляем с сайта почтовые сообщения……………………………………………………………………… 437

7.3.1. Регистрация в почтовом сервисе Timeweb……………………………………………………………. 438

7.3.2. Программные модули для отправки почтовых сообщений………………………………… 440

7.3.3. Проверка работы модулей отправки почтовых сообщений……………………………….. 443

7.4. Используем скрипты в шаблонах Django……………………………………………………………………….. 445

7.4.1. Скрипты для придания страницам сайта новогоднего стиля…………………………….. 446

7.4.2. Скрипты для анимации кнопок……………………………………………………………………………… 453

7.5. Используем фреймворк PyScript в шаблонах Django…………………………………………………….. 456

7.5.1. PyScript: отображение в шаблоне Django содержимого символьной переменной и списка                457

7.5.2. PyScript: импорт дополнительных библиотек, создание функции
и выполнение обращений к ним………………………………………………………………………………………. 459

7.5.3. PyScript: работа с пакетами NumPy и pandas………………………………………………………. 461

7.5.4. PyScript: работа с внешними библиотеками для обработки и визуализации данных           463

7.6. Используем пакет Brython для создания программ на Python для HTML-страниц……. 466

7.6.1. Brython: вывод на HTML-страницу обычной символьной строки…………………….. 467

7.6.2. Brython: игра «Змейка» (создание окон, функций и обращений к ним)……………… 468

7.7. Откатываем миграцию……………………………………………………………………………………………………… 474

7.8. Краткие итоги……………………………………………………………………………………………………………………. 475

Глава 8. Визуализация данных в Django………………………………………………. 477

8.1. Визуализация данных с библиотекой plotly.py: двумерная графика (2D)…………………… 477

8.1.1. Создание статичных графиков (одна линия)……………………………………………………….. 481

8.1.2. Создание статичных графиков (несколько линий)………………………………………………. 484

8.1.3. Отображение двух графиков в одном окне макета………………………………………………. 487

8.1.4. Отображение четырех графиков в одном окне макета………………………………………… 489

8.1.5. Создание 2D-диаграммы рассеяния……………………………………………………………………… 492

8.1.6. Создание круговой диаграммы……………………………………………………………………………… 495

8.1.7. Создание столбчатой гистограммы………………………………………………………………………. 497

8.1.8. Создание столбчатой гистограммы и сглаживающей кривой……………………………. 500

8.1.9. Создание графиков с тепловой картой…………………………………………………………………. 502

8.1.10. Создание пузырьковой диаграммы…………………………………………………………………….. 505

8.1.11. Пузырьковая диаграмма с цветными маркерами………………………………………………. 507

8.1.12. Пузырьковая диаграмма с масштабируемыми маркерами………………………………. 509

8.1.13. Пузырьковая диаграмма с поясняющим текстом на маркерах………………………… 512

8.1.14. Пузырьковая диаграмма с тепловой картой………………………………………………………. 514

8.1.15. Отображение статичных элементов на географических картах……………………… 516

8.2. Визуализация данных с библиотекой plotly.py: трехмерная графика (3D)…………………. 520

8.2.1. Создание 3D-графика линии по точкам………………………………………………………………… 520

8.2.2. Создание 3D-графика с указанием параметров линии……………………………………….. 522

8.2.3. Создание 3D-графика плавной витой линии………………………………………………………… 525

8.2.4. Создание 3D-графика линии с ключевыми точками……………………………………………. 527

8.2.5. Создание 3D-графика плоской поверхности………………………………………………………… 530

8.2.6. Создание 3D-графика изогнутой поверхности с использованием функций………. 533

8.2.7. Создание 3D-графика изогнутой поверхности с контурами
по вертикальной оси…………………………………………………………………………………………………………. 536

8.2.8. Создание 3D-графика поверхности с контурами по всем осям………………………….. 539

8.2.9. Создание 3D-графика поверхности с указанием параметров сцены и положения камеры 542

8.2.10. Создание 3D-графика поверхности с контурной сеткой…………………………………… 546

8.2.11. Создание 3D-диаграммы рассеяния точек…………………………………………………………. 549

8.3. Визуализация интерактивных графиков с библиотекой plotly.py………………………………… 551

8.3.1. Создание интерактивного 2D-графика со слайдером…………………………………………. 552

8.3.2. Комбинирование интерактивного графика с анимированными
изображениями…………………………………………………………………………………………………………………. 556

8.3.3. Вывод двух интерактивных графиков в одну координатную сетку…………………… 562

8.3.4. Вывод статичных и интерактивных графиков в одну координатную сетку……… 567

8.3.5. Анимация графиков с исчезновением элементов…………………………………………………. 571

8.3.6. Анимация графиков с появлением элементов………………………………………………………. 576

8.3.7. Анимация графиков с использованием фреймов и кнопок………………………………….. 583

8.3.8. Анимация графиков с использованием фреймов, кнопок и слайдера………………… 587

8.3.9. Анимация пузырьковой диаграммы………………………………………………………………………. 591

8.3.10. Анимация объемных 3D-срезов на примере снимков МРТ……………………………….. 598

8.3.11. Географические карты с анимацией данных пользовательских форм……………. 602

8.3.12. Географические карты с анимацией данных кнопками и слайдером……………… 608

8.4. Краткие итоги……………………………………………………………………………………………………………………. 612

Глава 9. Визуализация данных в Django с анимацией на JavaScript…….. 613

9.1. Включение JavaScript в шаблон Django………………………………………………………………………….. 613

9.1.1. Анимация диаграмм формата 2D………………………………………………………………………….. 614

Подключение библиотеки plotly.js………………………………………………………………………… 620

Тег <style>………………………………………………………………………………………………………………. 620

Теги для визуализации объектов…………………………………………………………………………… 620

Тег для кода на языке Java…………………………………………………………………………………….. 621

9.1.2. Анимация трехмерной диаграммы формата 3D…………………………………………………… 625

Подключение библиотеки plotly.js………………………………………………………………………… 631

Тег <style>………………………………………………………………………………………………………………. 631

Теги для визуализации объектов…………………………………………………………………………… 631

Тег для кода на языке Java…………………………………………………………………………………….. 632

9.2. Краткие итоги……………………………………………………………………………………………………………………. 635

Послесловие…………………………………………………………………………………………. 637

Приложение 1. Порядок работы с интерактивной цифровой платформой 639

Просмотр карточек с загруженными книгами………………………………………………………………………. 640

Просмотр вкладок цифровой книги………………………………………………………………………………………… 643

Вкладка Текст PDF………………………………………………………………………………………………………….. 645

Вкладка Листинги……………………………………………………………………………………………………………. 646

Вкладка Показ примеров…………………………………………………………………………………………………. 647

Приложение 2. Регистрация интернет-магазина на сайте платформы Robokassa  651

Предметный указатель…………………………………………………………………………. 655

Опубликовано

Встречайте: “Байесовская оптимизация с примерами из библиотек Python”

Байесовская оптимизация с примерами из библиотек Python

Книга рассказывает об оптимизации моделей машинного обучения на основе байесовского метода и теории вероятностей. Примеры составлены на языке Python с использованием библиотек PyTorch, GPyTorch и BoTorch.  Описаны приёмы настройки гиперпараметров, гауссовское распределение, использование политик машинного обучения, в частности на основе задачи о многоруких бандитах, повышение производительности вычислений, многовариантная оптимизация с учётом полезности и затрат, а также применение байесовского метода в специализированных сценариях.

Для специалистов по машинному обучению и математическим алгоритмам

Книга предназначена для практикующих специалистов по машинному обучению, уверенно ориентирующихся в математических методах и статистике.

О технологии:
Оптимизация в области машинного обучения заключается в достижении максимально качественных прогнозов за минимально возможное количество шагов. Так формируются кратчайшие маршруты доставки, идеальные цены, персонализированные рекомендации и т.д. В основе оптимизации по байесовскому методу лежит математический аппарат теории вероятностей. В рамках такой оптимизации вырабатываются способы настройки функций, алгоритмов и гиперпараметров машинного обучения.

О книге:
В книге рассказано, как выстраивать эффективные процессы машинного обучения с использованием байесовского подхода. Показано, как обучать модели на больших наборах данных, настраивать гиперпараметры и использовать метод парных сравнений.

Что внутри:

  • Гауссовские процессы для малых и больших наборов данных
  • Стратегии настройки гиперпараметров в моделях машинного обучения
  • Определение высокоэффективных регионов
  • Решение задач с использованием библиотек PyTorch, GPyTorch и BoTorch

Книгу “Байесовская оптимизация с примерами из библиотек PythonReact 19. Разработка веб-приложений на JavaScript” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Введение…………………………………………………………………………………………………………………………………… 11

Пролог……………………………………………………………………………………………………………………………………….. 13

Благодарности…………………………………………………………………………………………………………………………. 15

О книге……………………………………………………………………………………………………………………………………….. 17

Кому следует прочитать эту книгу?………………………………………………………………………………………………….. 17

Как организована эта книга: дорожная карта……………………………………………………………………………………. 17

О коде……………………………………………………………………………………………………………………………………………. 20

Дискуссионный форум liveBook………………………………………………………………………………………………………… 21

Архив с иллюстрациями к книге……………………………………………………………………………………………………….. 21

Об авторе………………………………………………………………………………………………………………………………….. 22

О техническом редакторе……………………………………………………………………………………………………………….. 22

Об изображении на обложке………………………………………………………………………………………………… 23

Глава 1. Введение в байесовскую оптимизацию……………………………………………………………. 24

1.1. Нахождение оптимума дорогостоящей функции «черного ящика»………………………………………………. 25

1.1.1. Настройка гиперпараметров как пример дорогостоящей задачи оптимизации
«черного ящика»……………………………………………………………………………………………………………………… 25

1.1.2. Проблема дорогостоящей оптимизации «черного ящика»…………………………………………………. 27

1.1.3. Другие реальные примеры дорогостоящих задач оптимизации «черного ящика»……………….. 28

1.2. Введение в байесовскую оптимизацию……………………………………………………………………………………… 30

1.2.1. Моделирование с помощью гауссовского процесса…………………………………………………………… 31

1.2.2. Принятие решений с помощью политики БО…………………………………………………………………….. 34

1.2.3. Объединение ГП и политики БО для формирования цикла оптимизации……………………………. 35

1.2.4. Байесовская оптимизация в действии………………………………………………………………………………. 37

1.3. Что вы узнаете в этой книге?……………………………………………………………………………………………………. 43

Заключение……………………………………………………………………………………………………………………………………. 44

Часть I. Моделирование с помощью гауссовских процессов………………….. 45

Глава 2. Гауссовский процесс как распределение по функциям…………………………………. 47

2.1. Как продать свой дом по методу Байеса……………………………………………………………………………………. 49

2.2. Моделирование корреляций с помощью многомерных гауссовских распределений и байесовских обновлений             51

2.2.1. Использование многомерных распределений Гаусса для совместного моделирования нескольких переменных 51

2.2.2. Обновление нормальных распределений…………………………………………………………………………. 55

2.2.3. Моделирование множества переменных с помощью многомерных гауссовских распределений 58

2.3. Переход от конечной гауссианы к бесконечной………………………………………………………………………….. 60

2.4. Реализация ГП в Python……………………………………………………………………………………………………………. 65

2.4.1. Настройка обучающих данных…………………………………………………………………………………………. 65

2.4.2. Реализация класса ГП……………………………………………………………………………………………………… 67

2.4.3. Создание прогнозов с помощью ГП………………………………………………………………………………….. 69

2.4.4. Визуализация прогнозов ГП…………………………………………………………………………………………….. 70

2.4.5. Выход за рамки одномерных целевых функций…………………………………………………………………. 73

2.5. Упражнение……………………………………………………………………………………………………………………………… 75

Заключение……………………………………………………………………………………………………………………………………. 77

Глава 3. Настройка ГП с помощью функций среднего значения и ковариации……….. 78

3.1. Важность априорных знаний в байесовских моделях………………………………………………………………….. 79

3.2. Включение предварительных знаний в ГП………………………………………………………………………………… 82

3.3. Определение поведения целевой функции с помощью функции среднего значения……………………. 83

3.3.1. Использование функции нулевого среднего в качестве базовой стратегии………………………… 84

3.3.2. Использование постоянной функции с градиентным спуском…………………………………………….. 86

3.3.3. Использование линейной функции с градиентным спуском……………………………………………….. 90

3.3.4. Использование квадратичной функции с помощью реализации пользовательской функции среднего  92

3.4. Определение изменчивости и гладкости с помощью ковариационной функции…………………………… 95

3.4.1. Настройка масштабов функции ковариации……………………………………………………………………… 95

3.4.2. Управление гладкостью с помощью различных ковариационных функций…………………………. 99

3.4.3. Моделирование различных уровней изменчивости с помощью
множественных масштабов длины…………………………………………………………………………………………… 101

3.5. Упражнение……………………………………………………………………………………………………………………………. 104

Заключение………………………………………………………………………………………………………………………………….. 106

Часть II. Принятие решений с помощью байесовской оптимизации…… 107

Глава 4. Достижение наилучшего результата с помощью политик,
основанных на улучшениях………………………………………………………………………………………………… 109

4.1. Навигация по пространству поиска в БО………………………………………………………………………………….. 110

4.1.1. Цикл БО и политики……………………………………………………………………………………………………….. 110

4.1.2. Баланс между исследованием и эксплуатацией……………………………………………………………….. 120

4.2. Поиск улучшений в БО……………………………………………………………………………………………………………. 122

4.2.1. Измерение улучшения с помощью ГП…………………………………………………………………………….. 123

4.2.2. Вычисление вероятности улучшения……………………………………………………………………………… 127

4.2.3. Запуск политики PoI……………………………………………………………………………………………………….. 131

4.3. Оптимизация ожидаемого значения улучшения……………………………………………………………………….. 135

4.4. Упражнения……………………………………………………………………………………………………………………………. 139

4.4.1. Упражнение 1: поощрение исследования с помощью PoI………………………………………………… 139

4.4.2. Упражнение 2: БО для настройки гиперпараметров………………………………………………………… 140

Заключение………………………………………………………………………………………………………………………………….. 142

Глава 5. Исследование пространства поиска с помощью «многорукого бандита». 143

5.1. Введение в задачу многорукого бандита………………………………………………………………………………….. 144

5.1.1. Как найти наилучший игровой автомат в казино……………………………………………………………… 144

5.1.2. От MAB к БО………………………………………………………………………………………………………………….. 147

5.2. Как быть оптимистом в условиях неопределенности с помощью политики
верхней доверительной границы…………………………………………………………………………………………….. 149

5.2.1. Оптимизм в условиях неопределенности………………………………………………………………………… 149

5.2.2. Баланс между исследованием и эксплуатацией……………………………………………………………….. 152

5.2.3. Реализация с помощью BoTorch…………………………………………………………………………………….. 154

5.3. Интеллектуальная выборка с помощью политики выборки Томпсона……………………………………….. 157

5.3.1. Одна выборка для представления неизвестного……………………………………………………………… 157

5.3.2. Реализация с помощью BoTorch…………………………………………………………………………………….. 160

5.4. Упражнения……………………………………………………………………………………………………………………………. 166

5.4.1. Упражнение 1: Настройка плана эксплуатации для UCB………………………………………………….. 167

5.4.2. Упражнение 2: БО для настройки гиперпараметров………………………………………………………… 167

Заключение………………………………………………………………………………………………………………………………….. 168

Глава 6. Использование теории информации с политиками на основе энтропии.. 170

6.1. Измерение знаний с помощью теории информации…………………………………………………………………. 171

6.1.1. Измерение неопределенности с помощью энтропии……………………………………………………….. 171

6.1.2. Поиск пульта дистанционного управления с помощью энтропии………………………………………. 174

6.1.3. Бинарный поиск с применением энтропии………………………………………………………………………. 177

6.2. Энтропийный поиск в БО………………………………………………………………………………………………………… 183

6.2.1. Поиск оптимума с помощью теории информации…………………………………………………………….. 183

6.2.2. Реализация энтропийного поиска с помощью BoTorch…………………………………………………….. 187

6.3. Упражнения……………………………………………………………………………………………………………………………. 190

6.3.1. Упражнение 1: Включение предварительных (априорных) знаний в энтропийный поиск…… 190

6.3.2. Упражнение 2: Байесовская оптимизация для настройки гиперпараметров……………………… 192

Заключение………………………………………………………………………………………………………………………………….. 193

Часть III. Расширение байесовской оптимизации на специализированные сценарии               195

Глава 7. Максимизация производительности за счет оптимизации
пакетной обработки……………………………………………………………………………………………………………… 197

7.1. Одновременное выполнение нескольких оценок функций………………………………………………………… 198

7.1.1. Параллельное использование всех доступных ресурсов………………………………………………….. 198

7.1.2. Почему нельзя использовать обычные политики БО в пакетном режиме?……………………….. 201

7.2. Вычисление улучшения и верхней доверительной границы для набора точек…………………………… 203

7.2.1. Расширение эвристик оптимизации для пакетного режима………………………………………………. 203

7.2.2. Реализация пакетных политик PoI, EI и UCB…………………………………………………………………… 210

7.3. Упражнение 1: Расширение TS до пакетной оптимизации с помощью повторной выборки………… 216

7.4. Вычисление ценности пакета точек с помощью теории информации………………………………………… 217

7.4.1. Нахождение наиболее информативного пакета точек с помощью цикличного уточнения….. 217

7.4.2. Реализация пакетного энтропийного поиска с помощью BoTorch…………………………………….. 220

7.5. Упражнение 2: Оптимизация конструкции самолета…………………………………………………………………. 222

Заключение………………………………………………………………………………………………………………………………….. 225

Глава 8. Удовлетворение особых ограничений с помощью
ограниченной оптимизации………………………………………………………………………………………………… 227

8.1. Учет ограничений в задаче ограниченной оптимизации…………………………………………………………… 228

8.1.1. Ограничения могут изменить решение задачи оптимизации……………………………………………. 228

8.1.2. Структура БО, учитывающая ограничения……………………………………………………………………… 231

8.2. Принятие решений с учетом ограничений в БО……………………………………………………………………….. 232

8.3. Упражнение 1: Ручное вычисление ограниченной EI………………………………………………………………… 238

8.4. Реализация ограниченной EI с помощью BoTorch……………………………………………………………………. 239

8.5. Упражнение 2: Ограниченная оптимизация при конструировании самолета………………………………. 243

Заключение………………………………………………………………………………………………………………………………….. 245

Глава 9. Балансирование между полезностью и затратами
с помощью многовариантной оптимизации…………………………………………………………………… 246

9.1. Использование приближений с низкой точностью для изучения дорогостоящих явлений…………… 248

9.2. Разноточное моделирование с помощью ГП……………………………………………………………………………. 251

9.2.1. Форматирование разноточного набора данных……………………………………………………………….. 251

9.2.2. Обучение разноточного ГП…………………………………………………………………………………………….. 255

9.3. Баланс между информацией и затратами в разноточной оптимизации……………………………………… 260

9.3.1. Моделирование затрат на запросы различной точности………………………………………………….. 260

9.3.2. Оптимизация количества информации для управления оптимизацией…………………………….. 262

9.4. Измерение производительности в разноточной оптимизации…………………………………………………… 267

9.5. Упражнение 1: Визуализация средней производительности в разноточной оптимизации…………… 272

9.6. Упражнение 2: Разноточная оптимизация с использованием нескольких
низкоточных приближений………………………………………………………………………………………………………. 273

Заключение………………………………………………………………………………………………………………………………….. 275

Глава 10. Обучение на парных сравнениях с помощью оптимизации
предпочтений…………………………………………………………………………………………………………………………. 277

10.1. Оптимизация «черного ящика» с помощью парных сравнений……………………………………………….. 279

10.2. Формулировка задачи оптимизации предпочтений и форматирование данных
парного сравнения………………………………………………………………………………………………………………… 282

10.3. Обучение ГП, основанного на предпочтениях………………………………………………………………………… 286

10.4. Оптимизация предпочтений с помощью игры «Царь горы»…………………………………………………….. 290

Заключение………………………………………………………………………………………………………………………………….. 294

Глава 11. Оптимизация нескольких целевых функций одновременно……………………. 296

11.1. Балансирование нескольких целей оптимизации с помощью БО…………………………………………….. 297

11.2. Нахождение границы наиболее оптимальных точек данных……………………………………………………. 299

11.3. Стремление к улучшению оптимальной границы данных………………………………………………………… 307

11.4. Упражнение: Многоцелевая оптимизация для конструирования самолета………………………………. 313

Заключение………………………………………………………………………………………………………………………………….. 314

Часть IV. Специальные модели гауссовского процесса……………………………. 315

Глава 12. Масштабирование гауссовского процесса для больших наборов
данных……………………………………………………………………………………………………………………………………… 317

12.1. Обучение ГП на большом наборе данных………………………………………………………………………………. 319

12.1.1. Постановка задачи обучения……………………………………………………………………………………… 319

12.1.2. Обучение обычного ГП………………………………………………………………………………………………. 322

12.1.3. Проблемы с обучением обычного ГП………………………………………………………………………….. 324

12.2. Автоматический выбор репрезентативных точек из большого набора данных………………………… 327

12.2.1. Минимизация различий между двумя ГП…………………………………………………………………….. 327

12.2.2. Обучение модели небольшими пакетами……………………………………………………………………. 329

12.2.3. Реализация приближенной модели…………………………………………………………………………….. 332

12.3. Достижение лучшей оптимизации с учетом геометрии поверхности потерь……………………………… 338

12.4. Упражнение………………………………………………………………………………………………………………………….. 344

Заключение………………………………………………………………………………………………………………………………….. 346

Глава 13. Комбинирование гауссовских процессов с нейросетями………………………… 347

13.1. Данные, имеющие структуру………………………………………………………………………………………………….. 348

13.2. Нахождение сходства в структурированных данных……………………………………………………………….. 351

13.2.1. Использование ядра с GPyTorch………………………………………………………………………………… 352

13.2.2. Работа с изображениями в PyTorch…………………………………………………………………………….. 352

13.2.3. Вычисление ковариации двух изображений………………………………………………………………… 354

13.2.4. Обучение ГП на изображениях…………………………………………………………………………………… 355

13.3. Использование нейросетей для обработки сложных структурированных данных……………………… 359

13.3.1. Зачем использовать нейросети для моделирования?………………………………………………….. 359

13.3.2. Реализация комбинированной модели в GPyTorch………………………………………………………. 361

Заключение………………………………………………………………………………………………………………………………….. 368

ПРИЛОЖЕНИЕ. Решения для упражнений………………………………………………………………………… 369

П.1. Глава 2: Гауссовский процесс как распределение по функциям……………………………………………….. 369

П.2. Глава 3: Объединение предварительных знаний с функциями среднего и ковариации……………… 372

П.3. Глава 4: Достижение наилучшего результата с помощью политик,
основанных на улучшениях…………………………………………………………………………………………………….. 374

П.3.1. Упражнение 1: Поощрение исследований с помощью вероятности улучшения……………….. 375

П.3.2. Упражнение 2: БО для настройки гиперпараметров……………………………………………………….. 376

П.4. Глава 5: Исследование пространства поиска с помощью политик «многорукого бандита»…………. 382

П.4.1. Упражнение 1: Настройка плана исследования для верхней доверительной границы……… 383

П.4.2. Упражнение 2: БО для настройки гиперпараметров……………………………………………………….. 384

П.5. Глава 6: Использование теории информации с политиками, основанными на энтропии……………. 387

П.5.1. Упражнение 1: Включение предварительных знаний в энтропийный поиск…………………….. 388

П.5.2. Упражнение 2: БО для настройки гиперпараметров……………………………………………………….. 391

П.6. Глава 7: Увеличение пропускной способности с помощью пакетной оптимизации…………………….. 392

П.6.1. Упражнение 1: Расширение TS для пакетного режима с помощью повторной выборки…… 392

П.6.2. Упражнение 2: Оптимизация конструкции самолета……………………………………………………….. 393

П.7. Глава 8: Удовлетворение дополнительных ограничений с помощью ограниченной оптимизации. 397

П.7.1. Упражнение 1: Ручное вычисление ограниченной политики EI……………………………………….. 397

П.7.2. Упражнение 2: Ограниченная оптимизация конструкции самолета…………………………………. 400

П.8. Глава 9: Баланс между полезностью и затратами с помощью разноточной оптимизации…………… 402

П.8.1. Упражнение 1: Визуализация средней производительности при разноточной оптимизации 403

П.8.2. Упражнение 2: Разноточная оптимизация с использованием нескольких
низкоточных приближений……………………………………………………………………………………………………… 405

П.9. Глава 11: Оптимизация нескольких целевых функций одновременно……………………………………….. 407

П.10. Глава 12: Масштабирование гауссовских процессов на большие наборы данных……………………. 409

Предметный указатель………………………………………………………………………………………………………… 414

Опубликовано

Новинка: “Python. Красивые задачи для начинающих”

Python. Красивые задачи для начинающих

В книге приведены примеры решения различных практических задач на языке Python и предложено детальное пошаговое описание процесса написания программы для каждой из них. Подобраны задачи, которые имеют несколько вариантов решений и формируют алгоритмическое мышление. Показаны основы структурного, динамического, объектно-ориентированного, функционального программирования. Приведены способы работы с функциями, алгоритмы поиска в длину, в ширину, бэктрекинга, рекурсии. Материал расположен по возрастанию сложности, код программ снабжен комментариями, разъясняющими все языковые конструкции Python.

Для начинающих программистов

Python — это красиво!

Главная причина популярности языка Python — его лаконичность, простота и выразительность. Один и тот же алгоритм на этом языке можно запрограммировать по-разному – так, что будет казаться, будто программа написана на разных языках. В этой книге приводятся алгоритмы решения задач на Python, которые автор считает красивыми — все они имеют несколько вариантов решений и формируют алгоритмическое мышление. Эти алгоритмы – часть хорошего IT-образования. Рассмотрев предложенные задачи, знакомый с основами Python читатель сможет проверить, действительно ли он умеет программировать, а изучив их решения, значительно улучшит свои алгоритмические навыки. Ценность книги состоит в том, что в ней приводится детальное пошаговое описание процесса написания программы для решения каждой поставленной задачи.

  • Структурное программирование
  • Динамическое программирование
  • Объектно-ориентированное программирование
  • Функциональное программирование

Книгу “Python. Красивые задачи для начинающих” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Предисловие…………………………………………………………………………………………….. 7

На кого рассчитана эта книга?………………………………………………………………………………………………… 10

Структура книги………………………………………………………………………………………………………………………… 11

Благодарности…………………………………………………………………………………………………………………………… 12

Глава 1. Условия……………………………………………………………………………………. 13

1.1. Квадратное уравнение, комплексные корни…………………………………………………………………….. 13

Задача………………………………………………………………………………………………………………………………….. 13

1.2. Кирпич и дыра в стене………………………………………………………………………………………………………… 18

Задача………………………………………………………………………………………………………………………………….. 18

Версия 1……………………………………………………………………………………………………………………… 19

Версия 2……………………………………………………………………………………………………………………… 20

Версия 3……………………………………………………………………………………………………………………… 21

Глава 2. Структурное программирование………………………………………………. 23

2.1. Полупроходной балл………………………………………………………………………………………………………….. 23

Задача 1………………………………………………………………………………………………………………………………. 23

Версия 1……………………………………………………………………………………………………………………… 24

Версия 2……………………………………………………………………………………………………………………… 25

Задача 2………………………………………………………………………………………………………………………………. 28

Версия 3……………………………………………………………………………………………………………………… 28

Версия 4……………………………………………………………………………………………………………………… 29

Задача 3………………………………………………………………………………………………………………………………. 31

Версия 5……………………………………………………………………………………………………………………… 32

2.2. Метеостанция……………………………………………………………………………………………………………………… 33

Задача………………………………………………………………………………………………………………………………….. 33

Версия 1……………………………………………………………………………………………………………………… 34

Версия 2……………………………………………………………………………………………………………………… 37

2.3. Седловина матрицы……………………………………………………………………………………………………………. 40

Задача………………………………………………………………………………………………………………………………….. 40

2.4. Максимальный квадрат в матрице, заполненный нулями………………………………………………. 43

Задача………………………………………………………………………………………………………………………………….. 43

2.5. Чемпионат по игре в тетрис……………………………………………………………………………………………….. 46

Задача………………………………………………………………………………………………………………………………….. 46

2.6. Проверка правильности расстановки скобок…………………………………………………………………… 51

Задача………………………………………………………………………………………………………………………………….. 51

Глава 3. Функции………………………………………………………………………………….. 57

3.1. Решето Эратосфена и числа-близнецы…………………………………………………………………………….. 57

Задача………………………………………………………………………………………………………………………………….. 57

3.2. Решето Сундарама……………………………………………………………………………………………………………… 65

Задача………………………………………………………………………………………………………………………………….. 65

3.3. Лесенка………………………………………………………………………………………………………………………………… 67

Задача………………………………………………………………………………………………………………………………….. 67

3.4. Линейный и медианный фильтры………………………………………………………………………………………. 73

Задача 1………………………………………………………………………………………………………………………………. 73

Задача 2………………………………………………………………………………………………………………………………. 84

3.5. Алгоритм Евклида………………………………………………………………………………………………………………. 85

Задача………………………………………………………………………………………………………………………………….. 85

3.6. Гипероператоры…………………………………………………………………………………………………………………. 91

Задача………………………………………………………………………………………………………………………………….. 91

3.7. Ханойские башни……………………………………………………………………………………………………………… 102

Задача……………………………………………………………………………………………………………………………….. 102

3.8. Отображения списков……………………………………………………………………………………………………….. 109

Задача……………………………………………………………………………………………………………………………….. 109

Глава 4. Поиск в длину и ширину, бэктрекинг,
динамическое программирование………………………………………………………… 119

4.1. Лабиринт……………………………………………………………………………………………………………………………. 119

Задача 1…………………………………………………………………………………………………………………………….. 120

Версия 1…………………………………………………………………………………………………………………… 120

Версия 2…………………………………………………………………………………………………………………… 125

Версия 3…………………………………………………………………………………………………………………… 130

Версия 4…………………………………………………………………………………………………………………… 134

Задача 2…………………………………………………………………………………………………………………………….. 139

4.2. Задача о восьми ферзях……………………………………………………………………………………………………. 143

Задача……………………………………………………………………………………………………………………………….. 143

Версия 1…………………………………………………………………………………………………………………… 143

Версия 2…………………………………………………………………………………………………………………… 156

4.3. Поиск индекса элемента в списке……………………………………………………………………………………. 161

Задача……………………………………………………………………………………………………………………………….. 161

Версия 1…………………………………………………………………………………………………………………… 161

Версия 2…………………………………………………………………………………………………………………… 162

Версия 3…………………………………………………………………………………………………………………… 163

4.4. Сжатие строки…………………………………………………………………………………………………………………… 167

Задача……………………………………………………………………………………………………………………………….. 167

4.5. Укладка рюкзака………………………………………………………………………………………………………………. 176

Задача……………………………………………………………………………………………………………………………….. 176

4.6. Подпоследовательность максимальной длины……………………………………………………………… 180

Задача……………………………………………………………………………………………………………………………….. 181

Версия 1…………………………………………………………………………………………………………………… 181

Версия 2…………………………………………………………………………………………………………………… 184

Версия 3…………………………………………………………………………………………………………………… 186

Версия 4…………………………………………………………………………………………………………………… 191

4.7. Палиндром наибольшей длины……………………………………………………………………………………….. 199

Задача……………………………………………………………………………………………………………………………….. 199

4.8. Гиперсфера………………………………………………………………………………………………………………………… 208

Задача……………………………………………………………………………………………………………………………….. 209

Глава 5. Объектно-ориентированное программирование…………………….. 219

5.1. Графы с помощью словарей…………………………………………………………………………………………….. 219

Задача 1…………………………………………………………………………………………………………………………….. 220

Задача 2…………………………………………………………………………………………………………………………….. 220

Задача 3…………………………………………………………………………………………………………………………….. 224

Задача 4…………………………………………………………………………………………………………………………….. 225

Задача 5…………………………………………………………………………………………………………………………….. 226

Задача 6…………………………………………………………………………………………………………………………….. 227

Задача 7…………………………………………………………………………………………………………………………….. 228

Задача 8…………………………………………………………………………………………………………………………….. 228

5.2. Родословное древо……………………………………………………………………………………………………………. 230

Задача 1…………………………………………………………………………………………………………………………….. 230

Задача 2…………………………………………………………………………………………………………………………….. 238

Задача 3…………………………………………………………………………………………………………………………….. 243

5.3. Период в числовой последовательности………………………………………………………………………… 252

Задача……………………………………………………………………………………………………………………………….. 252

Версия 1…………………………………………………………………………………………………………………… 252

Версия 2…………………………………………………………………………………………………………………… 253

Версия 3…………………………………………………………………………………………………………………… 254

5.4. Треугольник Паскаля и сочетания………………………………………………………………………………….. 257

Задача 1…………………………………………………………………………………………………………………………….. 257

Задача 2…………………………………………………………………………………………………………………………….. 259

Отступление про функторы……………………………………………………………………………………. 262

5.5. Гиперкуб в многомерном пространстве………………………………………………………………………….. 266

Задача……………………………………………………………………………………………………………………………….. 266

Глава 6. Функциональное программирование……………………………………… 287

6.1. Интеграл…………………………………………………………………………………………………………………………….. 288

Задача……………………………………………………………………………………………………………………………….. 288

6.2. Отображения, сохраняющие внутреннюю структуру…………………………………………………… 298

Общая задача……………………………………………………………………………………………………………………. 298

Задача 1…………………………………………………………………………………………………………………………….. 299

Задача 2…………………………………………………………………………………………………………………………….. 302

Задача 3…………………………………………………………………………………………………………………………….. 304

6.3. Цепочки функций………………………………………………………………………………………………………………. 305

Задача……………………………………………………………………………………………………………………………….. 305

6.4. Монады……………………………………………………………………………………………………………………………… 309

Задача……………………………………………………………………………………………………………………………….. 309

6.5. Карринг……………………………………………………………………………………………………………………………… 319

Задача……………………………………………………………………………………………………………………………….. 319

6.6. Функторы…………………………………………………………………………………………………………………………… 331

Задача……………………………………………………………………………………………………………………………….. 331

Выводы по главам 3, 4 и 6……………………………………………………………………………………………………….. 342

Глава 7. Сюрреализм……………………………………………………………………………. 345

7.1. Фрактальные списки…………………………………………………………………………………………………………. 345

7.2. Фрактальный словарь………………………………………………………………………………………………………. 346

7.3. Бесконечные вызовы функции…………………………………………………………………………………………. 346

7.4. Функтор с бесконечными вызовами………………………………………………………………………………… 347

Заключение………………………………………………………………………………………….. 349

Предметный указатель…………………………………………………………………………. 351

Добряк Павел Вадимович

Добряк Павел Вадимович — кандидат технических наук, преподаватель Уральского федерального университета. Проводит занятия по различным языкам программирования, базам данных, искусственному интеллекту и проектированию информационных систем. Репетитор по математике и информатике.

Опубликовано

Вышла книга Дуга Фаррелла “Python. Как стать профессионалом”

Python. Как стать профессионалом

Книга ориентирована на читателей, имеющих базовый опыт программирования на языке Python и желающих быстро научиться применять его в реальных проектах или изучить Python в качестве второго языка. Рассмотрен широкий круг тем от соблюдения чистоты кода и грамотного именования функций и переменных, до проектирования API, правил объектно-ориентированного программирования, обеспечения безопасности (аутентификация, авторизация) и взаимодействия с базами данных. Затронут широкий круг вопросов, связанных с программированием модулей на Python, автоматизацией задач, использования веб-фреймворков, в частности Flask.

Для программистов на Python

Разработка приложений с Python и Flask

Программисту-новичку не терпится увидеть, как его код заработает. В свою очередь, разработчик-профессионал обязан писать софт, который был бы максимально надёжен. Хороший код должен работать быстро, легко масштабироваться, не доставлять проблем с поддержкой. Наконец, код должен быть безопасен, качественно спроектирован и документирован, его должно быть легко обновлять и версионировать.

Эта книга поможет вам пройти путь от начинающего Python-программиста до уверенного Python-разработчика.

Книга помогает понять, почему Python – самый популярный язык в мире – необыкновенно хорош для профессиональной разработки. Работая с этим языком, легко приобрести важные профессиональные навыки – научиться именовать переменные, функции и классы, продумывать и писать качественные API, пользоваться объектами. Также в ней объяснено, как справляться с неизбежными отказами, в особенности сетевыми, соблюдать ключевые правила обеспечения безопасности, подключаться к базам данных и научиться профессионально решать конкретные задачи в рамках больших проектов на Python.

Значительная часть книги посвящена Python-фреймворку Flask, упрощающему и ускоряющему серверную веб-разработку на Python, поддерживающему создание статических веб-страниц и способствующему интеграции серверной и клиентской частей веб-приложения.

Книгу “Python. Как стать профессионалом” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Предисловие. 13

Введение. 15

Благодарности. 17

Об этой книге. 19

Для кого предназначена данная книга. 19

Структура книги: ее дорожная карта. 20

О коде. 22

Об авторе. 23

Глава 1. Становление питониста. 25

1.1. Стремление к обучению.. 26

1.2. Достижение целей. 27

1.2.1. Стиль мышления разработчика. 27

1.2.2. Создание приложений. 28

1.3. Использование языка Python. 28

1.3.1. Парадигмы программирования. 28

1.3.2. Создание сопровождаемого кода. 29

1.3.3. Производительность. 30

1.3.4. Сообщество приверженцев языка. 32

1.3.5. Инструментарий разработчика. 33

1.4. Выбор используемой версии Python. 34

1.5. Заключительные размышления. 35

1.6. Резюме. 35

Часть I. Закладка фундамента. 37

Глава 2. Подходящие имена. 39

2.1. Имена. 39

2.1.1. Присвоение имен. 41

2.1.2. Эксперимент по присвоению имен. 44

2.2. Пространства имен. 46

2.3. Пространства имен в языке Python. 47

2.3.1. Уровень встроенных модулей. 48

2.3.2. Уровень модуля. 49

2.3.3. Уровень функций. 53

2.3.4. Область видимости пространства имен. 54

2.3.5. Эксперимент с пространством имен. 56

2.4. Резюме. 60

Глава 3. API: давайте пообщаемся. 61

3.1. Начало разговора. 62

3.1.1. Соглашение, заключаемое между частями кода. 63

3.1.2. Что передается в качестве входных данных. 64

3.1.3. Что ожидается на выходе. 66

3.2. Работа API 69

3.2.1. Именование. 69

3.2.2. Параметры. 70

3.2.3. Возвращаемое значение. 73

3.2.4. Единственная ответственность. 73

3.2.5. Длина функции. 74

3.2.6. Идемпотентность. 75

3.2.7. Побочные эффекты. 75

3.3. Документация. 77

3.4. Заключительные размышления. 78

3.5. Резюме. 78

Глава 4. Объект разговора. 80

4.1. Объектно-ориентированное программирование. 80

4.1.1. Определение класса. 81

4.1.2. Рисование с помощью класса. 83

4.1.3. Наследование. 94

4.1.4. Полиморфизм. 102

4.1.5. Композиция. 103

4.2. Заключительные размышления. 107

4.3. Резюме. 107

Глава 5. Исключительные события. 109

5.1. Исключения. 111

5.2. Обработка исключений. 113

5.2.1. Обработка исключения, если код способен как-то исправить ситуацию.. 114

5.2.2. Предоставление исключениям возможности перемещаться вверх
по коду ваших программ. 114

5.2.3. Информирование пользователя. 115

5.2.4. Не стоит замалчивать исключения. 115

5.3. Выдача исключений. 120

5.4. Создание пользовательских исключений. 121

5.5. Заключительные размышления. 124

5.6. Резюме. 124

Часть II. Работа над конкретным заданием.. 125

Глава 6. Обмен информацией по Интернету. 127

6.1. Делитесь своей работой с другими. 127

6.1.1. Преимущества веб-приложений. 128

6.1.2. Сложности, связанные с использованием веб-приложений. 128

6.2. Серверы. 129

6.2.1. Модель “запрос — ответ”. 130

6.3. Веб-серверы. 131

6.4. Flask. 134

6.4.1. Почему именно Flask?. 134

6.4.2. Ваш первый веб-сервер. 135

6.4.3. Обслуживание содержимого. 138

6.4.4. Дополнительные функции Jinja2. 141

6.5. Запуск веб-сервера. 153

6.5.1. Gunicorn. 154

6.5.2. Коммерческий хостинг. 154

6.6. Заключительные размышления. 155

6.7. Резюме. 155

Глава 7. Работа со стилем.. 157

7.1. Стилизация приложения. 157

7.1.1. Создание привлекательных стилей. 158

7.1.2. Согласованность стилей. 158

7.1.3. Нормализация стилей. 159

7.1.4. Адаптивный дизайн. 159

7.2. Встраивание Bootstrap. 160

7.2.1. Предыдущий пример, теперь с Bootstrap. 160

7.3. Помощь в развитии приложения MyBlog. 169

7.3.1. Экземпляр приложения Flask. 169

7.4. Пространства имен. 174

7.4.1. Flask Blueprints 174

7.4.2. Добавление Blueprints в MyBlog. 175

7.4.3. Создание страницы “О сайте”. 179

7.4.4. Реструктуризированный app-экземпляр. 181

7.5. Навигация. 181

7.5.1. Создание навигационной информации. 182

7.5.2. Отображение навигационной информации. 183

7.5.3. Текущий вид MyBlog. 184

7.6. Конфигурация приложения. 186

7.6.1. Файлы конфигурации. 186

7.6.2. Закрытая информация. 186

7.7. Панель инструментов отладки Flask. 187

7.7.1. FlaskDynaConf 187

7.8. Регистрационная информация. 192

7.8.1. Конфигурация. 192

7.9. Добавление фавикона. 196

7.10. Заключительные размышления. 198

7.11. Резюме. 198

Глава 8. А я тебя знаю? Аутентификация. 200

8.1. Протокол HTTP, не имеющий состояния. 200

8.1.1. Сессии. 201

8.2. Запоминание пользователя. 202

8.2.1. Аутентификация. 203

8.2.2. Вход в систему. 213

8.3. Экстренные сообщения. 219

8.3.1. Усовершенствование формы входа. 220

8.4. Расширение круга друзей. 223

8.4.1. Blueprint-схема аутентификации. 224

8.4.2. Новая форма для пользователя. 225

8.4.3. Ах да: выход из системы. 228

8.5. Что дальше. 229

8.6. Резюме. 229

Глава 9. Какие действия вам разрешены? Авторизация. 230

9.1. Переход ко входу и выходу. 230

9.2. Подтверждение новых друзей. 232

9.2.1. Отправка электронной почты. 233

9.3. Сброс паролей. 239

9.4. Профили пользователей. 243

9.5. Безопасность. 246

9.5.1. Защита маршрутов. 246

9.6. Роли пользователей, задаваемые авторизацией. 247

9.6.1. Создание ролей. 247

9.6.2. Авторизация маршрутов. 250

9.7. Защита форм. 253

9.8. Заключительные размышления. 253

9.9. Резюме. 254

Глава 10. Выгоды от постоянства: базы данных. 255

10.1. Вторая половина дела. 255

10.1.1. Долговременное хранение информации. 256

10.2. Доступ к данным. 256

10.3. Системы управления базами данных. 262

10.3.1. Таблицы. 262

10.3.2. Отношения. 263

10.3.3. База данных транзакций. 266

10.3.4. Язык структурированных запросов SQL. 268

10.4. Использование SQLite в качестве базы данных. 271

10.5. SQLAlchemy. 271

10.5.1. Преимущества. 272

10.6. Моделирование базы данных. 272

10.6.1. Определение классов. 273

10.7. Создание и использование базы данных. 277

10.7.1. Добавление данных. 277

10.7.2. Использование данных. 280

10.8. Заключительные размышления. 283

10.9. Резюме. 283

Глава 11. Мне есть что сказать. 285

11.1. Публикации в MyBlog. 285

11.1.1. Моделирование баз данных. 286

11.2. Изменение порядка изложения материала. 289

11.3. Blueprint-схема контента. 289

11.4. Отображение и создание публикаций. 290

11.4.1. Обработчик отображения. 290

11.4.2. Шаблон отображения. 291

11.5. Создание публикаций. 292

11.5.1. Обработчик создания. 292

11.5.2. Форма создания. 293

11.5.3. Шаблон создания. 294

11.6. Отображение и редактирование публикации. 295

11.6.1. Обработчик отображения. 295

11.6.2. Шаблон отображения. 296

11.6.3. Обработчик обновления. 298

11.6.4. Форма обновления. 299

11.6.5. Шаблон обновления. 300

11.7. Иерархия контента для комментариев. 301

11.7.1. Изменение класса сообщения. 304

11.7.2. Обработчик отображения. 305

11.7.3. Шаблон отображения. 308

11.8. Создание комментариев. 310

11.8.1. Шаблон создания. 310

11.8.2. Форма создания. 311

11.8.3. Обработчик создания. 311

11.9. Уведомление пользователей. 312

11.10. Обработка ошибок сайта. 314

11.11. Заключительные размышления. 317

11.12. Резюме. 317

Глава 12. И что, на этом всё?. 319

12.1. Тестирование. 319

12.1.1. Модульное тестирование. 320

12.1.2. Функциональное тестирование. 321

12.1.3. Сквозное тестирование. 321

12.1.4. Интеграционное тестирование. 321

12.1.5. Нагрузочное тестирование. 321

12.1.6. Тестирование производительности. 321

12.1.7. Регрессионное тестирование. 322

12.1.8. Тестирование доступности. 322

12.1.9. Приемочное тестирование. 322

12.2. Отладка. 323

12.2.1. Воспроизведение ошибок. 323

12.2.2. Точки останова. 323

12.2.3. Ведение журнала. 324

12.2.4. Неприемлемые результаты. 324

12.2.5. Процесс исключения. 325

12.2.6. Проговаривание проблемы. 325

12.3. Инструменты. 325

12.3.1. Управление исходным кодом. 325

12.3.2. Оптимизация. 326

12.3.3. Контейнеры. 327

12.3.4. Базы данных. 327

12.3.5. Языки. 328

12.4. Среды операционных систем. 329

12.5. Облачные вычисления. 329

12.6. Сеть. 330

12.7. Сотрудничество. 330

12.8. Заключительные размышления. 331

12.9. Резюме. 331

Приложение. Ваша среда разработки. 333

П1. Установка Python. 333

П1.1. Windows 334

П1.2. Mac. 334

П1.3. Linux. 335

П2. Виртуальная среда Python. 336

П2.1. Windows 337

П2.2. Mac и Linux. 338

П3. Настройка Visual Studio Code. 339

П3.1. Установка Visual Studio Code. 339

П3.2. Установка Python-расширения. 340

П3.3. Другие полезные расширения. 340

П3.4. Запуск из командной строки. 341

П3.5. Запуск проекта. 341

П4. Ряд полезных советов. 343

Предметный указатель. 345

Doug Farrell

Дуг Фаррелл (Doug Farrell) занимается разработкой программных средств с 1983 года, хотя имеет степени бакалавра по двум явно смежным областям — по физике и по прикладному искусству. Дуг — программист-самоучка, на протяжении многих лет использовавший немало языков во многих отраслях: Pascal, Fortran, C/C++, PHP, Python и JavaScript. С Python он работает с 2000 года, а с 2006 года Python стал его основным языком. Дуг написал множество статей для RealPython.com. Он также преподавал в центре STEM, где использовалась существенная часть материалов разработанного им обучающего курса.

Опубликовано

Новинка: “Обработка данных на Python. Data Wrangling и Data Quality”

Обработка данных на Python. Data Wrangling и Data Quality

Книга посвящена первичной обработке данных (Data Wrangling) на Python  и  оценке их качества (Data Quality). Материал содержит основополагающие концепции, экспертные советы и  ресурсы, необходимые для первичной обработки, извлечения, оценки и анализа данных. Все темы раскрыты на простых и наглядных примерах из практики. Даны необходимые и достаточные сведения о языке программирования  Python 3.8+ для чтения, записи и преобразования данных из различных источников, а также  для обработки данных в больших масштабах. Приведены лучшие практики  документирования и структурирования кода. Описан сбор данных из файлов, веб-страниц и API. Рассмотрены приемы проведения базового статистического анализа наборов данных, а также наглядные и убедительные способы визуализации и представления  данных. Изложение рассчитано как на новичков по обработке данных, так и на профессионалов. Электронный архив на сайте издательства содержит цветные иллюстрации к книге.

Для специалистов по обработке данных

Начните работу с чтения, очистки и анализа данных

Мир вокруг нас полон данных, которые содержат уникальные и ценные сведения, но полезную информацию из этих «сырых» данных нужно уметь извлечь!

Книга содержит основополагающие концепции, экспертные советы и  ресурсы, необходимые для первичной обработки, извлечения, оценки и анализа данных, а также инструменты для эффективного представления выводов. Она предназначена для специалистов по обработке данных любого уровня — от новичков до опытных профессионалов — и предлагает простые, понятные всем и эффективные  способы обработки.

В этой книге ярко проявляется опыт Сьюзан Макгрегор в преподавании журналистики данных (data journalism) студентам всех уровней. Она приводит примеры из реальной жизни и объясняет, как подходить к поиску, проверке и анализу данных доступным способом.
 Джоанна С. Као , технический руководитель журналистики данных в газете Файнэншл Таймс

  • Применяйте Python 3.8+ для чтения, записи и преобразования данных из различных источников, а также для обработки данных в больших масштабах.
  • Организуйте, документируйте и структурируйте свой код, используя лучшие практики
  • Собирайте данные из файлов, веб-страниц и API
  • Проводите базовый статистический анализ, чтобы осмыслить наборы данных
  • Визуализируйте и представляйте данные наглядным и убедительным образом

Книгу “Обработка данных на Python. Data Wrangling и Data Quality” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Введение. 11

Для кого предназначена эта книга?. 12

Поедете сами или возьмете такси?. 12

Кому не следует читать эту книгу?. 13

Что ожидать от этой книги. 13

Типографские соглашения. 14

Использование примеров кода. 15

Цветные иллюстрации. 16

Возможности онлайнового обучения от компании O’Reilly. 16

Как связаться с нами. 16

Благодарности. 17

ГЛАВА 1. Введение в первичную обработку (выпас) и качество данных. 19

Что такое выпас данных?. 20

Что такое качество данных?. 22

Целостность данных. 23

Соответствие данных. 23

Почему мы выбрали Python?. 25

Универсальность. 25

Доступность. 25

Удобочитаемость. 26

Сообщество. 26

Альтернативы языку Python. 27

Написание и исполнение программ на языке Python. 27

Работа с кодом Python на локальном устройстве. 30

Введение в работу с командной строкой. 30

Установка языка Python, среды Jupyter Notebook и редактора кода. 33

Работа с кодом Python в режиме онлайн. 39

Hello World! 39

Создание файла автономного сценария Python при помощи Atom.. 39

Создание блокнота кода Python в Jupyter Notebook. 41

Создание блокнота кода Python в Google Colab. 42

Создаем программу. 43

В файле автономного сценария. 43

В блокноте. 43

Исполняем программу. 43

В файле автономного сценария. 43

В блокноте. 44

Документирование, сохранение и управление версиями своего кода. 44

Документирование. 44

Сохранение. 46

Управление версиями. 46

Заключение. 56

ГЛАВА 2. Введение в Python. 57

“Части речи” языков программирования. 58

Существительные ≈ переменные. 59

Важно ли конкретное имя?. 61

Наилучшие практики для именования переменных. 62

Глаголы ≈ функциям. 62

Применение пользовательских функций. 67

Библиотеки: занимаем пользовательские функции у других программистов. 68

Структуры управления: циклы и условные операторы. 69

Циклы. 69

Условные операторы. 72

Понимание ошибок. 77

Синтаксические ошибки. 78

Ошибки времени исполнения. 79

Логические ошибки. 83

Отправляемся в путь с данными Citi Bike. 85

Начинаем с создания псевдокода. 86

Масштабирование. 92

Заключение. 93

ГЛАВА 3. Понимание качества данных. 95

Оценка соответствия данных. 97

Достоверность данных. 98

Надежность данных. 100

Репрезентативность данных. 101

Оценка целостности данных. 104

Необходимые, но недостаточные. 106

Важные. 108

Достижимость. 111

Улучшение качества данных. 114

Очистка данных. 115

Аугментация данных. 115

Заключение. 116

ГЛАВА 4. Работа с файловыми и канальными данными
на языке Python. 117

Структурированные и неструктурированные данные. 119

Работа со структурированными данными. 123

Файловые табличные форматы данных. 124

Выпас табличных данных посредством языка Python. 126

Выпас реальных данных: понимание безработицы. 133

XLSX, ODS и все остальные. 136

Данные фиксированной ширины. 143

Канальные данные — интерактивные обновления через Интернет. 147

Выпас канальных данных средствами языка Python. 150

Формат JSON: данные следующего поколения. 160

Работа с неструктурированными данными. 165

Текст на основе изображений: доступ к данным в формате PDF. 165

Выпас PDF-данных, используя Python. 166

Обращение к таблицам PDF посредством Tabula. 171

Заключение. 171

ГЛАВА 5. Доступ к интернет-данным.. 173

Доступ к веб-данным XML и JSON.. 175

Знакомство с API-интерфейсами. 178

Базовые API-интерфейсы на примере поисковой системы. 179

Специализированные API-интерфейсы: добавление простой
аутентификации. 181

Получение ключа для API-интерфейса FRED.. 181

Использование ключа API для запроса данных. 182

Чтение документации по API-интерфейсу. 183

Защита своего ключа API при использовании сценариев Python. 186

Создание файла учетных данных. 188

Использование учетных данных в отдельном сценарии. 189

Основы работы с файлом .gitignore. 190

Специализированные API-интерфейсы: работа с протоколом OAuth. 193

Получение учетной записи разработчика Twitter 194

Создание приложения и учетных данных Twitter 196

Кодирование ключа API и ключа секрета API 201

Запрос токена доступа и данных из API-интерфейса Twitter 202

Этические нормы при работе с API-интерфейсами. 206

Извлечение веб-данных: источник данных последней надежды. 207

Осторожно извлекаем данные с веб-сайта УГПТ. 210

Использование средств инспектирования браузера. 211

Решение Python для извлечения данных из веб-страницы:
библиотека Beautiful Soup. 214

Заключение. 218

ГЛАВА 6. Оценка качества данных. 219

Пандемия и программа PPP. 221

Оценка целостности данных. 222

Имеют ли данные известное происхождение?. 223

Актуальны ли данные?. 223

Полные ли данные?. 224

Хорошо ли данные аннотированы?. 236

Являются ли данные крупномасштабными?. 242

Непротиворечивы ли данные?. 244

Многомерны ли наши данные?. 248

Атомарны ли данные?. 250

Понятны ли данные?. 250

Размерностно структурированы ли данные?. 252

Оценка соответствия данных. 253

Достоверность данных. 253

Надежность данных. 257

Репрезентативность данных. 258

Заключение. 259

ГЛАВА 7. Очистка, преобразование и дополнение данных. 261

Выбор подмножества данных системы Citi Bike. 262

Простое разбиение. 263

Регулярные выражения: супермощное средство сопоставления строк. 265

Создание дат. 270

Удаление хлама из файлов данных. 272

Декодирование дат Excel 276

Создание настоящих данных CSV из данных фиксированной ширины. 279

Исправление разнообразности написаний. 282

Тернистый путь к “простым” решениям. 288

Опасные подводные камни. 290

Дополнение данных. 292

Заключение. 294

ГЛАВА 8. Структурирование и рефакторинг кода. 296

Обзор пользовательских функций. 296

Многократное использование кода. 297

Аккуратное и понятное документирование. 297

Недостаточная функциональность по умолчанию.. 298

Область видимости. 298

Определение параметров функции. 301

Доступные опции. 302

Предоставление аргументов. 303

Возвращаемые значения. 303

Работа со стеком. 305

Рефакторинг для получения удовольствия и прибыли. 306

Функция для определения рабочих дней. 306

Опрятные метаданные. 309

Использование pydoc для документирования сценариев и пользовательских функций. 317

О полезности аргументов командной строки. 321

Отличия во взаимодействии со сценариями в автономных файлах и блокнотах. 325

Заключение. 325

ГЛАВА 9. Введение в анализ данных. 327

Вся суть — в контексте. 328

Одинаковые, но не совсем. 329

Что типично? Оценка центральной тенденции. 329

Что это значит?. 330

Поразмыслим нестандартно: выявляем выбросы. 332

Визуализация для анализа данных. 332

Какова форма наших данных? Учимся понимать гистограммы. 336

Вопрос за $2 миллиона. 346

Пропорциональный ответ. 359

Заключение. 362

ГЛАВА 10. Представление данных. 364

Основы визуального красноречия. 365

Сформулируйте свои данные. 367

Диаграммы, графики и картограммы — вот это да! 368

Круговые диаграммы. 369

Линейчатые и столбчатые диаграммы. 372

Линейные диаграммы. 377

Диаграмма рассеяния. 380

Картограммы. 383

Элементы красноречивых визуальных эффектов. 386

“Мелкие” детали действительно имеют значение. 386

Доверяйте своим глазам (и экспертам) 387

Выбор масштаба. 388

Выбор цветовой гаммы. 389

Прежде всего делайте аннотации! 389

От базового к красивому: настройка визуализации с помощью seaborn и matplotlib. 390

Выйдите за рамки основ. 395

Заключение. 396

ГЛАВА 11. За пределами Python. 397

Дополнительные инструменты для анализа данных. 398

Программы для работы с электронными таблицами. 398

OpenRefine. 399

Дополнительные инструменты для обмена и представления данных. 402

Редактирование изображений в форматах JPG, PNG и GIF. 402

Программное обеспечение для редактирования SVG и других векторных форматов. 402

Размышления об этике. 404

Заключение. 405

Приложение А. Другие ресурсы по программированию на Python. 406

Официальная документация Python. 406

Установка ресурсов Python. 407

Где искать библиотеки. 407

Следите за остротой своих инструментов. 408

Где получить больше информации. 409

Приложение Б. Еще несколько слов о Git 410

Вы запускаете команду git push/pull и оказываетесь в странном текстовом редакторе. 410

Ваша команда git push/pull отклоняется. 412

Выполните команду git pull 412

Краткое руководство по Git 414

приложение В. Поиск данных. 416

Репозитории данных и API 416

Эксперты по предметным вопросам. 417

Запросы FOIA/L. 418

Кастомные методы сбора данных. 419

приложение Г. Ресурсы для визуализации и информационного дизайна. 421

Основополагающие книги по визуализации информации. 421

Краткое руководство, за которым вы потянетесь. 422

Источники вдохновения. 422

Об авторе. 423

Колофон. 424

Предметный указатель. 425

Susan McGregor

Сьюзен Макгрегор (Susan McGregor) — исследователь Института науки о данных Колумбийского университета. На протяжении более десяти лет она применяет свой успешный подход к преподаванию программирования и анализа данных для студентов нетехнических специальностей.

Опубликовано

Встречайте: Сетевое программирование на Python

Сетевое программирование на Python

Книга посвящена разработке серверных приложений и клиент-серверных архитектур на Python. Рассказано о поддержке SSL в Python 3, представлены примеры работы с протоколами TCP, UDP, HTTP, SMTP, IMAP, FTP, RPC, взаимодействия с сервисами DNS. Освещена работа с электронной почтой в приложениях. Описаны цели протокола TLS и методы их достижения на Python. Подробно описаны возможности модуля asyncio, входящего в состав Python 3.4, даны рекомендации по разработке сетевых приложений с использованием веб-фреймворков Flask и Django.

Для программистов

ПОДРОБНОЕ РУКОВОДСТВО ПО СЕТЕВОМУ ПРОГРАММИРОВАНИЮ НА PYTHON

Книга рассказывает о разработке на языке Python клиент-серверных проектов, взаимодействующих с сетью и веб-приложениями. Всесторонне рассматривается поддержка SSL, показаны примеры работы с протоколами TCP, UDP, HTTP, SMTP, IMAP, FTP, RPC и взаимодействия с сервисами DNS. Рассказано об использовании входящего в состав Python 3.4 модуля asyncio, о сетевых возможностях веб-фреймворков Flask и Django.

В книге описаны
ключевые возможности SSL в Python 3,
цели протокола TLS и методы их достижения на Python,
архитектура серверов и создание серверных приложений,
работа с электронной почтой в приложениях,
применение Flask и Django для создания сетевых веб-приложений.

Книгу “Сетевое программирование на Python” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Об авторе. 14

О рецензенте. 15

Благодарности. 16

Предисловие. 17

Пакет кода. 19

ГЛАВА 1. Введение в сетевое взаимодействие между клиентом и сервером.. 21

Содержание главы. 21

Цель  22

Основы: стеки и библиотеки. 22

Уровни приложения. 25

Что такое протокол. 26

Сетевое взаимодействие. 28

Слой за слоем. 30

Кодирование и декодирование. 32

Протокол IP. 33

IP-адреса. 34

Маршрутизация. 35

Фрагментация пакетов. 37

Подробно об IP. 38

Резюме. 38

ГЛАВА 2. Протокол UDP. 41

Содержание главы. 42

Цель  42

Множество сервисов в одной системе. 42

Сокет — точка соединения. 44

Клиенты, принимающие любые пакеты. 48

Отсрочка, блокировка и время ожидания. 50

UDP-сокеты. 54

Идентификаторы запросов. 56

От привязки до интерфейсов. 57

Фрагментация UDP. 59

Параметры сокетов. 61

Широковещание. 62

Сценарии применения UDP. 64

Резюме. 64

ГЛАВА 3. Протокол TCP. 67

Содержание главы. 67

Цель  68

Как работает TCP. 68

Когда использовать TCP. 69

Сокеты TCP. 70

TCP-клиент и TCP-сервер. 71

Одно взаимодействие — один сокет. 75

Адрес. 77

От привязки до интерфейсов. 78

Взаимоблокировка. 79

Полуоткрытые соединения, закрытые соединения. 84

Потоки TCP для передачи файлов. 86

Резюме. 86

ГЛАВА 4. DNS и имена сокетов. 89

Содержание главы. 89

Цель  89

Имена сокетов и хостов. 90

Пять координат сокетов. 91

IPv6  92

Современное разрешение адресов. 93

Привязка сервера к порту с помощью getaddrinfo() 94

Метод getaddrinfo() для привязки к сервису. 95

Получение канонического имени хоста с помощью getaddrinfo() 96

Другие флаги getaddrinfo() 98

Примитивные процедуры службы имен. 99

Метод getsockaddr() 100

Протокол DNS. 101

Почему не стоит использовать DNS напрямую.. 104

Python для DNS-запросов. 105

Разрешение почтовых доменов. 106

Резюме. 109

ГЛАВА 5. Данные и ошибки в Интернете. 111

Содержание главы. 111

Цель  111

Строки и байты. 111

Строки символов. 113

Сетевой порядок байтов и двоичные числа. 116

Кадрирование. 119

Pickle и форматы с разделителями. 125

JSON и XML. 126

Сжатие. 127

Исключения в сети. 128

Специфические исключения. 130

Исключения в сети: обнаружение и сообщение об ошибках. 131

Резюме. 133

ГЛАВА 6. Протокол SSL/TLS. 135

Содержание главы. 135

Цель  136

От чего не защищает TLS. 136

Что худшее может случиться?. 137

Создание сертификатов. 139

TLS Offloading. 141

Контексты по умолчанию в Python 3.4. 142

Подходы к обертке сокетов. 146

Выбор шифров вручную и Perfect Forward Security. 147

Поддержка протокола TLS. 149

Дальнейшее изучение. 151

Резюме. 157

ГЛАВА 7. Архитектура сервера. 159

Содержание главы. 159

Цель  160

Несколько слов о развертывании. 160

Базовый протокол. 162

Однопоточный сервер. 166

Многопроцессорный и многопоточный серверы. 169

Фреймворк SocketServer из прошлого. 171

Асинхронные серверы. 172

Фреймворк asyncio с обратными вызовами. 177

Фреймворк asyncio с сопрограммами. 179

Устаревший модуль asyncore. 181

Комбинированный подход. 182

Под влиянием inetd. 183

Резюме. 185

ГЛАВА 8. Очереди сообщений и кеши. 187

Содержание главы. 187

Цель  188

Использование Memcached (кеширование в памяти) 188

Хеширование и сегментирование. 191

Очереди сообщений. 194

Очереди сообщений в Python. 196

Резюме. 201

ГЛАВА 9. HTTP-клиенты.. 203

Содержание главы. 203

Цель  204

Библиотеки клиентов Python. 204

Кадрирование, шифрование и порты. 206

Методы. 208

Хосты и пути. 209

Коды состояний. 210

Валидация и кеширование. 213

Кодирование содержимого. 216

Согласование содержимого. 216

Тип содержимого. 218

Аутентификация по HTTP. 219

Файлы cookie. 221

Поддержание соединения и httplib. 222

Резюме. 223

ГЛАВА 10. Серверы для работы с HTTP. 225

Содержание главы. 225

Цель  226

Стандарт WSGI 226

Серверные фреймворки для асинхронной обработки. 228

Прямые и обратные прокси. 229

Четыре архитектурных стиля. 230

Python на Apache. 232

HTTP-серверы на Python. 232

Преимущество обратных прокси. 233

Платформа как услуга. 234

REST и паттерны GET и POST. 236

WSGI без фреймворка. 238

Резюме. 242

ГЛАВА 11. Всемирная паутина. 245

Содержание главы. 245

Цель  246

URL и гипермедиа. 246

Создание и парсинг URL. 247

Относительные URL. 250

Язык гипертекстовой разметки HTML. 251

Чтение и запись с использованием базы данных. 253

Ужасное веб-приложение на Flask. 255

Методы и формы HTTP. 261

Когда формы используют неподходящие методы. 263

Опасные и безопасные сookie. 264

Непостоянный межсайтовый скриптинг. 266

Постоянный межсайтовый скриптинг. 268

Подделка межсайтовых запросов. 269

Улучшенная программа. 270

Приложение для оплаты на Django. 273

Выбор фреймворка для веб-сайта. 277

Веб-сокеты. 279

Веб-скрейпинг. 279

Получение страниц. 281

Страницы для веб-скрейпинга. 285

Рекурсивный веб-скрейпинг. 287

Резюме. 291

ГЛАВА 12. Составление и парсинг сообщений электронной почты.. 293

Содержание главы. 293

Цель  294

Форматирование электронного письма. 294

Составление электронного письма. 296

HTML и мультимедиа. 298

Создание контента. 303

Парсинг электронного письма. 305

Использование MIME. 307

Кодирование заголовков. 309

Парсинг дат. 311

Резюме. 312

ГЛАВА 13. Протокол SMTP. 313

Содержание главы. 313

Цель  314

Веб-сервисы электронной почты и почтовые клиенты. 314

Все началось с командной строки. 314

Развитие клиентов. 315

Переход на веб-сервисы электронной почты. 317

Функции SMTP. 318

Передача электронной почты. 319

Получатель на конверте и заголовки. 320

Несколько прыжков. 320

Библиотека для работы с протоколом SMTP. 322

Обработка ошибок и отладка. 323

EHLO для сбора информации. 326

SSL и TLS. 329

Аутентификация SMTP. 332

Советы по SMTP. 333

Резюме. 334

ГЛАВА 14. Протокол POP. 335

Содержание главы. 335

Цель  336

Серверы POP и стандарты. 336

Аутентификация и подключение. 336

Получение информации о почтовом ящике. 339

Загрузка и удаление писем. 340

Резюме. 343

ГЛАВА 15. Протокол IMAP. 345

Содержание главы. 346

Цель  347

Реализация IMAP в Python. 347

Клиент IMAP. 349

Просмотр папок. 351

UID и номера писем. 351

Интервалы между письмами. 352

Общая информация. 352

Получение всего почтового ящика. 354

Загрузка отдельных писем. 356

Добавление и удаление флагов. 363

Удаление писем. 364

Поиск. 364

Работа с папками. 366

Асинхронность. 367

Резюме. 367

ГЛАВА 16. Протоколы SSH и Telnet 369

Содержание главы. 369

Цель  370

Автоматизация с помощью командной строки. 370

Раскрытие выражения и экранирование в командной строке. 371

Аргументы в командах UNIX.. 372

Экранирование символов. 374

Ужасная командная строка Windows 376

Терминал. 377

Терминалы и буферизация. 380

Telnet 381

SSH: безопасная оболочка. 386

SSH: краткий обзор. 386

Ключи хоста для SSH.. 387

Аутентификация в SSH.. 390

Отдельные команды и сеансы. 391

Протокол SFTP. 396

Дополнительные возможности. 399

Резюме. 399

ГЛАВА 17. Протокол FTP. 401

Содержание главы. 402

Цель  402

Что делать, если невозможно использовать FTP. 402

Каналы коммуникации. 403

FTP в Python. 404

Двоичные файлы и файлы ASCII 405

Расширенная загрузка двоичных файлов с сервера. 407

Отправка данных на удаленный компьютер. 409

Расширенная отправка двоичных данных. 410

Обработка ошибок. 411

Поиск по каталогам. 412

Обнаружение каталогов и загрузка в рекурсивном режиме. 414

Создание и удаление каталогов. 416

Безопасное использование FTP. 416

Резюме. 416

ГЛАВА 18. RPC — удаленный вызов процедур. 419

Содержание главы. 420

Цель  421

Характеристики RPC. 421

XML-RPC. 422

JSON-RPC. 429

Самодокументируемые данные. 432

Объекты: Pyro и RPyC. 434

Пример RPyC. 435

Очереди сообщений, RPC и веб-фреймворки. 438

Восстановление после ошибок в сети. 438

Резюме. 439

Предметный указатель. 441

Опубликовано

Удивительная книга для детей: “Мама, не отвлекай. Я Python учу!”

Мама, не отвлекай. Я Python учу!

Эта книга + телефон – все, что нужно ребенку, чтобы полностью самостоятельно без помощи взрослых освоить основы программирования на языке Python, написать десятки игр, интерактивных программ и поделиться ими в любых привычных мессенджерах и соцсетях.
Книгу отличает сверхбыстрый старт, удобство обучения, легкость изложения и авторский юмор, .
При этом новички узнают о командах, циклах, типах данных, переменных, условных выражениях, графических примитивах и координатах. Освоят игры и анимацию, работу со строками, комментарии, методы (функции), операторы сравнения, случайные числа, условные выражения и многое другое. Электронный архив на сайте издательства содержит коды примеров и изображения эмодзи.

Для детей младшего и среднего школьного возраста

Читать и программировать можно весело и непринужденно

Телефон есть практически у каждого ребенка 10+ лет. Осталось только купить эту книгу, чтобы ребенок полностью самостоятельно смог изучить основы самого популярного языка программирования Python.

Читать и программировать можно весело и непринужденно: сидя на диване, на даче у бабушки, на прогулке или на переменках в школе – в одной руке телефон, в другой эта книга.

Первую программу на Python можно выполнить за пару минут, еще даже не открыв книгу, а только считав телефоном QR-код с ее обложки!

Прочитав всю книгу, ребенок

  • напишет несколько десятков игр и интерактивных программ,
  • поделится ими со своими друзьями в привычных мессенджерах и соцсетях,
  • отправится в увлекательное путешествие в профессиональное программирование.

Книгу “Мама, не отвлекай. Я Python учу!” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Лазаревский Игорь Вадимович

Лазаревский Игорь Вадимович – программист, автор книг и курсов, преподаватель Американского университета в Центральной Азии, основатель онлайн-школы по программированию Khasang со стажем преподавания современных языков программирования более 10 лет, вырастивший десятки высококлассных Senior-разработчиков с полного нуля. Ведет личный блог igor.kg.

Опубликовано

Супер бестселлер: “Python для гиков”

Python для гиков

Книга подробно рассказывает о разработке, развертывании и поддержке крупномасштабных проектов на Python. Представлены такие концепции, как итераторы, генераторы, обработка ошибок и исключений, обработка файлов и ведение журналов. Приведены способы автоматизации тестирования приложений и разработки через тестирование (TDD). Рассказано о написании приложений с использованием кластера Apache Spark для обработки больших данных, о разработке и развертывании бессерверных программ в облаке на примере Google Cloud Platform (GCP), о создании веб-приложений и REST API, использовании среды Flask. Показаны способы применения языка для создания, обучения и оценки моделей машинного обучения, а также их развертывания в облаке, описаны приемы использования Python для извлечения данных с сетевых устройств и систем управления сетью (NMS).

Для программистов

Создавайте эффективные приложения, используя лучшие практики программирования.

Гик — человек, глубоко погруженный в мир компьютерных технологий, стремящийся досконально разобраться в наиболее важных мелочах и нюансах. Эта книга написана для гиков, увлеченных программированием на Python.

Книга раскрывает методы оптимального использования Python как с точки зрения проектирования, так и реализации практических задач. В ней подробно описан жизненный цикл крупномасштабного проекта на Python, показаны различные способы создания модульной архитектуры Python-проекта. Вы изучите лучшие практики и паттерны проектирования, узнаете, как масштабировать приложения на Python, как реализовать многопроцессорность и многопоточность. Вы поймете, как можно использовать Python не только для развертывания на одной машине, но также в частных и публичных облачных средах. Вы изучите методы обработки данных, сосредоточитесь на создании микросервисов и научитесь использовать Python для автоматизации сетей и машинного обучения. Наконец, вы узнаете, как применять описанные методы и практики в веб-разработке.

Вы изучите:

  • Принципы разработки и управления сложными проектами
  • Способы автоматизации тестирования приложений и разработки через тестирование (TDD)
  • Многопоточность и многопроцессорность в Python
  • Написание приложений с использованием кластера Apache Spark для обработки больших данных
  • Разработку и развертывание бессерверных программ в облаке на примере Google Cloud Platform (GCP)
  • Создание на Python веб-приложений и REST API, использование среды Flask
  • Использование Python для извлечения данных с сетевых устройств и систем управления сетью (NMS)
  • Применение Python для анализа данных и машинного обучения

Книгу “Python для гиков” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Об авторе. 14

О рецензентах. 15

Предисловие. 16

Для кого предназначена эта книга. 16

О чем эта книга. 17

Как получить максимальную отдачу от книги. 18

Загрузка файлов с примерами кода. 18

Условные обозначения. 19

Раздел 1. Python помимо основ. 21

Глава 1. Оптимальный жизненный цикл разработки на Python. 23

Культура и сообщество Python. 23

Этапы проекта Python. 26

Стратегия процесса разработки. 27

Итерация по этапам. 28

Стремление к MVP в первую очередь. 28

Стратегия разработки для специализированных предметных областей. 29

Эффективное документирование кода Python. 32

Комментарии Python. 32

Docstring. 32

Документация на уровне функций или классов. 34

Разработка эффективной схемы именования. 35

Методы. 36

Переменные. 36

Константы. 37

Классы. 37

Пакеты. 38

Модули. 38

Соглашения об импорте. 38

Аргументы. 38

Полезные инструменты. 38

Системы контроля версий. 39

Что не стоит хранить в репозитории системы контроля версий. 39

Понимание стратегий развертывания кода. 40

Пакетная разработка. 40

Среды разработки Python. 42

IDLE. 42

Sublime Text 42

Atom.. 42

PyCharm.. 42

Visual Studio Code. 43

PyDev. 43

Spyder 43

Заключение. 43

Вопросы. 44

Дополнительные ресурсы. 44

Ответы. 44

Глава 2. Использование модулей для сложных проектов. 45

Технические требования. 46

Знакомство с модулями и пакетами. 46

Импорт модулей. 46

Оператор import 48

Оператор __import__. 52

Инструмент importlib.import_module. 52

Абсолютный и относительный импорт. 53

Загрузка и инициализация модуля. 55

Загрузка модуля. 55

Установка параметров для специальных переменных. 55

Выполнение кода. 56

Стандартные модули. 57

Написание многоразовых модулей. 58

Независимая функциональность. 58

Генерализация функционала. 59

Традиционный стиль программирования. 60

Четко определенная документация. 61

Сборка пакетов. 62

Именование. 63

Файл инициализации пакета. 63

Сборка пакета. 63

Доступ к пакетам из любого расположения. 66

Общий доступ к пакету. 70

Создание пакета в соответствии с рекомендациями PyPA.. 70

Установка из локального исходного кода с помощью pip. 73

Публикация пакета в Test PyPI 75

Установка пакета из PyPI 76

Заключение. 77

Вопросы. 77

Дополнительные ресурсы. 77

Ответы. 78

Глава 3. Расширенное объектно-ориентированное программирование
на Python. 79

Технические требования. 80

Знакомство с классами и объектами. 80

Различия между атрибутами класса и атрибутами экземпляра. 80

Конструкторы и деструкторы классов. 83

Различия между методами класса и методами экземпляра. 84

Специальные методы. 85

Принципы ООП.. 86

Инкапсуляция данных. 87

Объединение данных и действий. 87

Сокрытие информации. 89

Защита данных. 91

Традиционный подход к использованию геттеров и сеттеров. 91

Использование декоратора property. 92

Расширение классов с помощью наследования. 94

Простое наследование. 94

Множественное наследование. 96

Полиморфизм. 97

Перегрузка метода. 97

Переопределение метода. 98

Абстракция. 100

Композиция как альтернативный подход к проектированию.. 102

Утиная типизация в Python. 104

Когда не стоит использовать ООП в Python. 105

Заключение. 106

Вопросы. 106

Дополнительные ресурсы. 107

Ответы. 107

Раздел 2. Расширенные концепции программирования. 109

Глава 4. Библиотеки Python для продвинутого программирования. 111

Технические требования. 111

Введение в контейнеры данных Python. 112

Строки. 112

Списки. 113

Кортежи. 114

Словари. 114

Множества. 115

Итераторы и генераторы для обработки данных. 116

Итераторы. 116

Генераторы. 120

Обработка файлов в Python. 122

Операции с файлами. 123

Обработка ошибок и исключений. 126

Работа с исключениями в Python. 127

Вызов исключений. 129

Определение пользовательских исключений. 130

Модуль logging в Python. 131

Основные компоненты системы логирования. 132

Работа с модулем logging. 134

Что стоит и не стоит записывать в журнал. 140

Заключение. 141

Вопросы. 141

Дополнительные ресурсы. 141

Ответы. 141

Глава 5. Тестирование и автоматизация с помощью Python. 143

Технические требования. 144

Понимание различных уровней тестирования. 144

Модульное тестирование. 145

Интеграционное тестирование. 145

Системное тестирование. 145

Приемочное тестирование. 146

Работа с тестовыми фреймворками Python. 146

Работа с фреймворком unittest 148

Фреймворк тестирования pytest 157

Разработка через тестирование. 165

Красный. 165

Зеленый. 166

Рефакторинг. 166

Автоматизированная непрерывная интеграция. 167

Заключение. 168

Вопросы. 168

Дополнительные ресурсы. 168

Ответы. 169

Глава 6. Дополнительные советы и приемы Python. 170

Технические требования. 170

Расширенные приемы использования функций в Python. 171

Функции counter, itertools и zip для итерационных задач. 171

Использование методов filter, map и reduce для преобразования данных. 175

Создание лямбда-функций. 178

Внедрение одной функции в другую.. 179

Изменение поведения функции с помощью декораторов. 181

Расширенные концепции структур данных. 187

Внедрение словаря в словарь. 187

Использование включений. 190

Введение в Pandas DataFrame. 192

Операции с объектом DataFrame. 193

Сложные случаи использования DataFrame. 198

Заключение. 203

Вопросы. 204

Дополнительные ресурсы. 204

Ответы. 204

Раздел 3. Масштабирование за пределы одного потока. 205

Глава 7. Многопроцессорная обработка, многопоточность
и асинхронное программирование. 207

Технические требования. 208

Многопоточность в Python и ее ограничения. 208

Слепое пятно Python. 209

Ключевые компоненты многопоточного программирования на Python. 210

Практический пример: многопоточное приложение для загрузки файлов
с Google Диска. 218

Многопроцессорная обработка. 221

Создание нескольких процессов. 221

Обмен данными между процессами. 224

Обмен объектами между процессами. 228

Синхронизация процессов. 230

Практический пример: многопроцессорное приложение
для загрузки файлов с Google Диска. 231

Асинхронное программирование для адаптивных систем. 233

Модуль asyncio. 234

Распределение задач с помощью очередей. 236

Практический пример: асинхронное приложение для загрузки файлов
с Google Диска. 238

Заключение. 240

Вопросы. 240

Дополнительные ресурсы. 241

Ответы. 241

Глава 8. Масштабирование Python с помощью кластеров. 242

Технические требования. 243

Возможности кластеров для параллельной обработки. 243

Hadoop MapReduce. 244

Apache Spark. 246

Устойчивые распределенные наборы данных (RDD) 249

Операции с RDD.. 249

Создание RDD.. 250

PySpark для параллельной обработки данных. 251

Создание программ SparkSession и SparkContext 253

PySpark для операций с RDD.. 254

PySpark DataFrames 257

PySpark SQL. 261

Практические примеры использования Apache Spark и PySpark. 262

Пример 1: калькулятор числа π в Apache Spark. 262

Заключение. 268

Вопросы. 269

Дополнительные ресурсы. 269

Ответы. 270

Глава 9. Программирование на Python для облака. 271

Технические требования. 271

Знакомство с облачными возможностями для приложений Python. 272

Среды разработки Python для облака. 272

Облачные среды выполнения для Python. 274

Создание веб-сервисов Python для облачного развертывания. 276

Использование Google Cloud SDK.. 277

Использование веб-консоли GCP. 284

Использование Google Cloud Platform для обработки данных. 287

Введение в основы Apache Beam.. 287

Конвейеры Apache Beam.. 289

Создание конвейеров для Cloud Dataflow.. 294

Заключение. 298

Вопросы. 299

Дополнительные ресурсы. 299

Ответы. 300

Раздел 4. Python для веб-разработки, облака и сети. 301

Глава 10. Использование Python для разработки веб-приложений
и REST API 303

Технические требования. 304

Требования к веб-разработке. 304

Веб-фреймворки. 304

Пользовательский интерфейс. 305

Веб-сервер/сервер приложений. 306

База данных. 307

Безопасность. 307

API 307

Документация. 307

Знакомство с фреймворком Flask. 308

Создание базового веб-приложения с маршрутизацией. 308

Обработка запросов с разными типами HTTP-методов. 310

Отображение статического и динамического контента. 312

Извлечение параметров из HTTP-запроса. 313

Взаимодействие с системами управления базами данных. 315

Обработка ошибок и исключений в веб-приложениях. 318

Создание REST API 321

Использование Flask для REST API 322

Разработка REST API для доступа к базе данных. 324

Пример: создание веб-приложения с помощью REST API 326

Заключение. 331

Вопросы. 332

Дополнительные ресурсы. 332

Ответы. 332

Глава 11. Разработка микросервисов на Python. 334

Технические требования. 334

Введение в микросервисы. 335

Практические рекомендации по созданию микросервисов. 337

Создание приложений на базе микросервисов. 338

Варианты разработки микросервисов на Python. 339

Варианты развертывания микросервисов. 340

Разработка приложения на основе микросервисов. 341

Заключение. 352

Вопросы. 352

Дополнительные ресурсы. 352

Ответы. 353

Глава 12. Создание бессерверных функций на Python. 354

Технические требования. 355

Знакомство с бессерверными функциями. 355

Преимущества бессерверных функций. 356

Варианты использования. 356

Варианты развертывания бессерверных функций. 357

Написание бессерверных функций. 358

Создание облачной функции на основе HTTP с помощью консоли GCP. 359

Практический пример: создание приложения для уведомлений
о событиях в облачном хранилище. 363

Заключение. 367

Вопросы. 367

Дополнительные ресурсы. 367

Ответы. 367

Глава 13. Python и машинное обучение. 369

Технические требования. 370

Введение в машинное обучение. 370

Использование Python для машинного обучения. 372

Библиотеки машинного обучения в Python. 372

Рекомендации по обучающим данным. 374

Создание и оценка модели машинного обучения. 375

Процесс построения модели машинного обучения. 375

Создание примера машинного обучения. 376

Оценка модели с помощью кросс-валидации и тонкой настройки гиперпараметров. 381

Сохранение ML-модели в файл. 384

Развертывание и прогнозирование ML-модели в GCP Cloud. 385

Заключение. 388

Вопросы. 388

Дополнительные ресурсы. 388

Ответы. 389

Глава 14. Python для автоматизации сети. 390

Технические требования. 391

Введение в автоматизацию сети. 391

Плюсы и минусы автоматизации сети. 392

Варианты использования. 393

Взаимодействие с сетевыми устройствами. 394

Протоколы для взаимодействия с сетевыми устройствами. 394

Взаимодействие с сетевыми устройствами с помощью библиотек Python
на основе SSH.. 397

Взаимодействие с сетевыми устройствами с помощью NETCONF. 404

Интеграция с системами управления сетью.. 408

Использование конечных точек сервиса определения местоположения. 409

Получение токена аутентификации. 410

Получение сетевых устройств и инвентаризация интерфейсов. 411

Обновление порта на сетевом устройстве. 412

Интеграция с событийно-ориентированными системами. 414

Создание подписок для Apache Kafka. 416

Обработка событий от Apache Kafka. 417

Продление и удаление подписки. 418

Заключение. 418

Вопросы. 419

Дополнительные ресурсы. 419

Ответы. 420

 

Предметный указатель. 421

Азиф Мухаммад

Мухаммад Азиф — программный архитектор, обладающий обширным опытом в области веб-разработки, автоматизации сетей и облаков, виртуализации и машинного обучения. ,Возглавлял многие крупномасштабные проекты в различных коммерческих компаниях. В 2012 году, получил степень доктора философии в области компьютерных систем в Карлтонском университете (Оттава, Канада) и в настоящее время работает в компании Nokia в качестве ведущего специалиста.