- Знакомство с Python: история, возможности, сферы применения.
- Установка среды разработки (PyCharm, VS Code, Jupyter Notebook).
- Переменные.
- Первая программа: вывод текста(print()).
- Основные типы данных (int, float, str).
- Метод (input).
- Базовые операции.
- Практические задания
- Домашнее задание.
- Булева алгебра.
- Понятие булевой алгебры: True и False (приведение типов).
- Операторы сравнения (>, <, >=, <=, ==, !=).
- Логические операторы (and, or, not).
- Условные конструкции (if, elif, else).
- Вложенные и сложные условия.
- Практические задания
- Домашнее задание.
- Что такое исключения? Виды ошибок в Python.
- Обработка исключений с помощью try-except.
- Использование finally.
- Практические задания
- Домашнее задание.
- Списки (Lists), создание, изменение, доступ к елементам списка, добавление и удаление элементов
- Mетоды списков(append, clear, copy ...)
- Понятие циклов и их необходимость.
- Цикл for: синтаксис, примеры использования.
- Цикл while: синтаксис, примеры использования.
- Операторы break и continue.
- Вложенные циклы.
- Практические задания
- Домашнее задание.
- List comprehetion.
- Встроенные функции any, all, sum, len, max, min, get...
- Введение в файловую систему Python: чтение и запись файлов.
- Практические задания
- Домашнее задание.
- Введение в хеш-таблицы
- Кортежи (tuple)
- Множества(set)
- Словари(dict)
- Практические задания
- Домашнее задание
- Введение в функции
- Аргументы и параметры
- Типизация в Python (Type Hints)
- Анонимные функции lambda
- Функции высшего порядка: map(), zip(), filter()
- Практические задания
- Домашнее задание
- Рекурсия.
- Что такое Алгоритмы?
- Бинарный поиск.
- Практические задания
- Домашнее задание
- Сортировки:
- Сортировка пузырьком (Bubble Sort)
- Сортировка вставками (Insertion Sort)
- Сортировка слиянием (Merge Sort)
- Практические задания
- Домашнее задание
- Введение в Git.
- Практика.
- Что такое удаленный репозиторий?
- Удаленные репозитории примеры.
- Знакомство с Git-Hub.
- Pull Request.
- Введение в ООП.
- Классы и объекты.
- Атрибуты и методы.
- Основные парадигмы ООП.
- Практические задания
- Домашнее задание
- Абстрактные классы (ABC)
- Множественное наследование
- Magic methods.
- Метаклассы,( type,new)
- Создание Собственных Исключений в Python.
- Функции как объекты (передача функций в аргументы, return function)
- Вложенные функции
- Замыкания (closures)
- Декораторы (функции-декораторы @decorator)
- Декораторы классов: @staticmethod, @classmethod, @property
- Импорт модулей в Python.
- Как Python находит модули? (sys.path)
- Стандартная библиотека Python (Standard Library)
- PEP8 – стиль написания кода в Python
- Введение в тестирование.
- Виды тестирования.
- Уровни тестирования.
- Assert
- TestCase
- Тестовые фреймворки. Почему unittest?
- Встроенные Assert.
- Запуск тестов.
- Структура проекта (где хранить тесты)
- Модуль mock
- Введение.
- Виды Проектирования.
- Этапы объектно-ориентированной разработки: OOA → OOD → OOP
- Анализ (OOA):
- Проектирование (OOD):
- Реализация (OOP):
- Подход к проектированию :
- Базовые принципы:
- KISS (Keep It Simple, Stupid)
- DRY (Don’t Repeat Yourself)
- Data-Driven Development (DDD)
- Test-Driven Development (TDD)
- Базовые принципы:
- Патерны проектирования.
- Порождающие.
- Структурные.
- Поведенческие.
- Основные принципы ООП - SOLID.
- The Single Responsibility Principle (S)
- The Open Closed Principle (O)
- The Liskov Substitution Principle (L)
- ISP: The Interface Segregation Principle (I)
- DIP: The Dependency Inversion Principle (D)
-
Введение в СУБД.
-
Типы СУБД.
-
Примеры СУБД.
-
PostgreSQL.
- Установка PostgreSQL.
-
Таблицы:
- Строки.
- Столбцы.
-
Типы данных в БД.
- Строковые.
- Числовые.
- Булевые.
- NULL.
- Собственные типы данных.
-
Основные операции c данными (CRUD).
- C - Create (Создание).
- R - Read (Чтение).
- U - Update (Обновление).
- D - DELETE (Удаление).
-
SQL (Structured Query Language) (Структурированный язык запросов)
-
DDL (Data definition language) (Язык определения данных)
- CREATE
- ALTER
- DROP
- TRUNCATE
- Создание пользователя.
- Создание БД.
- Права доступа к БД.
-
DCL (Data Control Language)
- GRANT
- REVOKE
-
DML (Data manipulating language)
- INSERT
- UPDATE
- DELETE
-
Связи
- Ключевые слова
- Типы связей
-
- DQL (Data query language) (Язык запроса данных):
- SELECT
- FROM
- WHERE:
- Операторы сравнения: =, !=, >, <, >=, <=.
- Операторы логики: AND, OR, NOT.
- Поиск по шаблону (LIKE)
- Сортировка (ORDER BY):
- ASC
- DESC
- Агрегатные функции:
- COUNT() Количество строк
- SUM() Сумма значений
- AVG() Среднее значение
- MIN() Минимальное значение
- MAX() Максимальное значение
- Группировка данных (GROUP BY)
- HAVING
- Ограничение количества строк (LIMIT, OFFSET)
- Использование операторов UNION, INTERSECT и EXCEPT в SQL
- Объединение таблиц (JOIN):
- INNER JOIN (внутреннее соединение)
- LEFT JOIN (левое соединение)
- RIGHT JOIN (правое соединение)
- FULL OUTER JOIN (полное соединение)
- Нормализация
- Аномалии
- Три нормальные формы.
- Транзакции
- TCL
- ACID
- Backup
- Введение в управление окружением в Python
- Virtualenv и venv (Создание виртуального окружения)
- Управление пакетами с Pip
- Устанавливаемые модули
- Pyenv – управление версиями Python
- Сравнение инструментов (venv, virtualenv, pyenv, pipenv)
-
Введение: Как работает интернет?
- Что такое интернет?
- Как устройства соединяются между собой?
- Роль серверов, клиентов и сетевого протокола.
- Примеры веб-сайтов и веб-приложений.
-
Клиент-серверная архитектура
- Кто такой клиент (браузер, мобильное приложение).
- Кто такой сервер (где хранится код и данные).
- Различие статических и динамических сайтов.
- Как клиент и сервер взаимодействуют через запросы и ответы.
-
HTTP – Основной протокол веба
- Что такое HTTP (HyperText Transfer Protocol)?
- Разница между HTTP и HTTPS.
- Как работает запрос-ответ?
- Структура HTTP-запроса:
- Метод (GET, POST, PUT, DELETE).
- Заголовки (Headers).
- Тело запроса (Body).
- Структура HTTP-ответа:
- Код ответа (200 OK, 404 Not Found, 500 Internal Server Error).
- Тело ответа (HTML, JSON, XML).
-
Введение в Django
- Что такое Django и почему его выбирают?
- История и философия Django ("The web framework for perfectionists with deadlines").
- Преимущества Django:
- Быстрое создание веб-приложений.
- Автоматическое управление БД (ORM).
- Безопасность (защита от XSS, CSRF, SQL-инъекций).
- Гибкость и масштабируемость.
- Примеры крупных проектов на Django (Instagram, Spotify, Disqus).
-
Архитектура Django: MVT (Model-View-Template)
- Шаблон проектирования MVC.
- Django основан на MVT (Model-View-Template), который похож на MVC.
- Разница между MVC и MVT
- Как взаимодействуют Model, View и Template в Django.
-
Установка Django и создание первого проекта
- Установка Django:
- Создание виртуального окружения
- Установка Django
- Создание первого проекта Django
- Команда для создания проекта
- Запуск сервера разработки
- Разбор структуры проекта
- Создание первого приложения в Django
- Команда для создания приложения
- Разбор структуры приложения
- Подключение приложения в settings.py
- Основы маршрутизации (urls.py)
- Что такое маршрутизация?
- Структура URL-маршрутов в Django:
- Главный urls.py (основной файл маршрутизации проекта)
- urls.py внутри приложения (локальные маршруты)
- Динамические параметры в URL
- int:id
- str:username
- Именованные маршруты (name)
- Перенаправления и обработка ошибок
- Регулярные выражения в маршрутах (re_path)
- Установка Django:
-
Введение в Django Templates:
- Что такое шаблоны и зачем они нужны?
- Где Django ищет шаблоны (TEMPLATES в settings.py).
- Структура каталога templates/.
- Как Django рендерит HTML-страницы?
- Разбор стандартного процесса: - Запрос → URL → View → Template → Ответ пользователю.
-
Базовый синтаксис шаблонного языка:
- Вывод переменных ({{ }})
- Шаблонные фильтры (filters)
-
Управляющие конструкции в шаблонах:
- Условные операторы (if / elif / else)
- Циклы (for)
-
Наследование шаблонов
- Базовый шаблон (base.html):
- Как избежать дублирования кода с помощью {% block %} и {% extends %}.
- Создание базового шаблона.
- Использование extends в дочерних шаблонах
- Базовый шаблон (base.html):
-
Подключение CSS, JS и статических файлов:
- Работа с static/
- Подключение CSS и SCSS
- Подключение изображений
- Включение частей шаблонов (include)
- Практика
Лекция 24. Модели в Django. Установка и настройка базы данных PostgreSQL. Связи между моделями. Meta, Abstract, Proxy (3 часа)
-
Установка и настройка базы данных PostgreSQL.
- Создание базы данных и пользователя PostgreSQL.
- Подключение PostgreSQL к Django.
- Конфигурация Django
- Команда migrate
- Настройка приложения
-
Введение в модели Django и PostgreSQL (20 минут)
- Что такое модели Django?
- Модель (Model) – это Python-класс, который представляет таблицу в базе данных.
- Где хранятся модели? (myapp/models.py).
- Создание модели
- Админка
-
Основные типы полей в моделях Django:
- Текстовые поля:
- CharField(max_length=...) – строка фиксированной длины.
- TextField() – большой текст (например, описание).
- Числовые поля:
- IntegerField()
- FloatField()
- DecimalField()
- Булевы значения -BooleanField() – True/False.
- Дата и время -DateTimeField(auto_now_add=True), DateField().
- EmailField.
- JSONField (для PostgreSQL)
- Позволяет хранить JSON-данные.
- Текстовые поля:
-
Медиа :
- Настройка settings.py
- FileField
- ImageField
-
Связи:
- OneToOne
- ForeignKey
- ManyToMany
-
class Meta в моделях Django
-
Введение в Django ORM.
- Что такое Django ORM (Object-Relational Mapping)?
- Позволяет работать с базой без SQL-запросов.
- Преобразует Python-классы в таблицы базы данных.
- Использует QuerySet для работы с записями.
- Основной принцип ORM:
- Модели → Объекты Python → Таблицы в базе.
- Django ORM позволяет работать с разными СУБД (PostgreSQL, MySQL, SQLite).
-
Создание и управление объектами моделей
- Создание объектов моделей
- Получение данных (SELECT)
- Фильтрация данных (WHERE)
- Обновление записей (UPDATE)
- Удаление записей (DELETE)
-
Работа с QuerySet:
- Основные операции с QuerySet
- Сортировка (order_by)
- Ограничение выборки (limit и offset)
- Агрегатные функции (SUM, AVG, COUNT, MIN, MAX)
-
objects и shell
- Введение в формы Django
- Что такое формы в Django?
- Форма позволяет собирать и обрабатывать данные от пользователя.
- Django автоматически защищает формы от CSRF-атак.
- CSRF-атака.
- Типы форм в Django:
- Forms (ручное создание) – кастомные формы.
- ModelForms – формы, созданные на основе моделей Django.
- Что такое формы в Django?
- Создание стандартных форм (Django Forms)
- Создание формы вручную
- Отображение формы в шаблоне
- Обработка формы (POST-запрос)
- ModelForms – формы на основе моделей
- Что такое ModelForm?
- Позволяет автоматически создать форму на основе модели.
- Упрощает работу с формами и БД.
- Создание модели
- Создание ModelForm
- Использование ModelForm в views.py
- Что такое ModelForm?
- Пользователь (User) в Django
- Модель пользователя Django
- Создание пользователя в Django Shell
- Расширение модели пользователя
- Аутентификация пользователей
- Что такое Аутентификация?
- Регистрация пользователя
- Вход в систему
- Выход из системы
- Итоговая практика
-
Введение в Class-Based Views (CBV)
- Что такое CBV и зачем они нужны?
- Django изначально использует Function-Based Views (FBV).
- CBV позволяют:
- Избежать дублирования кода.
- Автоматизировать стандартные задачи (CRUD).
- Разделить логику на маленькие переопределяемые методы.
- Когда использовать CBV, а когда FBV?
- Что такое CBV и зачем они нужны?
-
Основные классы CBV:
- Class View
- Class TemplateView - рендер html файлов
- ListView – вывод списка объектов
- DetailView – детальная информация об объекте
- CreateView – создание нового объекта
- UpdateView – обновление объекта
- DeleteView – удаление объекта
- Class RedirectView - перенаправления пользователя на другую страничку
- Class LoginView - логин пользователя
- LogoutView - выход пользователя
-
Использование миксинов в CBV:
- LoginRequiredMixin – доступ только для авторизованных пользователей
- PermissionRequiredMixin – проверка прав доступа
- UserPassesTestMixin - более сложные проверки прав пользователей
-
Комбинирование миксинов
- Введение в NoSQL
- Что такое NoSQL и зачем он нужен?
- Виды NoSQL баз данных
- Django + NoSQL: Как их совместить?
- Django по умолчанию поддерживает реляционные базы (PostgreSQL, MySQL).
- Для работы с NoSQL можно использовать MongoDB (Djongo, pymongo) или Redis.
- Работа с куками (Cookies) в Django
- Что такое куки?
- Работа с куками в Django
- Установка куки (set_cookie)
- Чтение куки (request.COOKIES)
- Удаление куки (delete_cookie)
- Сессии в Django
- Что такое сессии?
- Настройка сессий в Django (settings.py)
- Работа с сессиями в Django:
- Сохранение данных в сессию
- Получение данных из сессии
- Удаление сессии
- Кеширование (Cache) в Django
- Что такое кеш и зачем он нужен?
- Настройка кеша в settings.py
- Использование Redis для кеша
- Простое кеширование представления
- Кеширование в коде (ручной способ)
- Что такое Middleware?
- Пример работы Middleware:
- Пользователь отправляет запрос (request → Middleware → View).
- Django обрабатывает запрос, затем передаёт ответ (response → Middleware → Браузер).
- Middleware может изменять, фильтровать и логировать запросы и ответы.
- Встроенные Middleware в Django.
- Создание кастомного Middleware.
- Django Signals
- Что такое сигналы в Django?
- Создание сигнала.
- Django Messages
- Что такое Messages?
- Подключение.
- Добавление.
- Отображения.
- Что такое Messages?
- Manage Commands в Django
- Что такое Manage-команды?
- Создание кастомной команды
- Что такое API?
- Что такое REST?
- Основные принципы REST (CRUD, ресурс-ориентированность, стейтлесс).
- HTTP-запросы:
- Методы (GET, POST, PUT, DELETE, PATCH).
- Код ответа (200, 201, 400, 401, 403, 404, 500).
- JSON как формат передачи данных.
- Введение в Django REST Framework (DRF)
- Что такое Django REST Framework (DRF)?
- Почему DRF используется для создания API?
- Упрощает создание API на Django.
- Встроенная валидация и сериализация.
- Поддержка аутентификации и авторизации.
- Как работает API в Django?
- Клиент отправляет HTTP-запрос.
- Django обрабатывает запрос и формирует JSON-ответ.
- Фронтенд-приложение (React, Vue, Angular) получает ответ.
- Установка и настройка DRF.
- Установка Django REST Framework
- Подключение DRF в settings.py
- Добавление конфигурации REST_FRAMEWORK
- Function-Based Views (FBV)
- @api_view(['GET', 'POST'])
- Добавление маршрутов (urls.py):
- Response() – возвращаем JSON.
- Примеры работы API через FBV.
- Введение в сериализаторы (serializers.py)
- Что такое сериализаторы и зачем они нужны?
- Serializer vs ModelSerializer.
- Примеры сериализации данных.
- APIView в Django REST Framework
- Сравнение FBV и APIView
- Примеры запросов через Postman (GET):
- Подключить APIView в urls.py
- Работа с моделями и APIView
- Создание модели
- Создание сериализатора
- Использываниеа APIView с моделями
- ViewSet:
- Что такое ViewSet?
- Создание ViewSet
- ModelViewSet и ReadOnlyModelViewSet
- Пример
- Пагинация
- Пример
- Router
- Что такое Router?
- Подключение Router в urls.py
- Аутентификация и Авторизация
- Разница между аутентификацией и авторизацией
- Виды аутентификации в DRF:
- SessionAuthentication – стандартная Django-сессия (подходит для - веб-приложений).
- BasicAuthentication – базовая аутентификация по логину и паролю.
- TokenAuthentication – аутентификация через токены (используется в - API).
- JWT (JSON Web Token) – более безопасный способ аутентификации для - API.
- OAuth 2.0 – используется в авторизации через Google, Facebook и - другие сервисы.
- Подключение аутентификации в settings.py
- Создание токена для пользователя
- Permissions в DRF
- Что такое Permissions?
- Основные классы Permissions
- Пример Ограничения доступа к API через Permissions
- Фильтрация данных в API
- Что такое фильтрация?
- Установка и подключение фильтрции
- Примеры
- Поиск и сортировка в API
- Введение в тестирование API
- Django TestCase и APIClient
- Создание тестов для API
- Тестирование CRUD-операций
- Тестирование аутентификации (JWT, TokenAuth)
- Тестирование permissions (проверка доступа)
- Тестирование фильтрации и пагинации
- Модульные и интеграционные тесты в DRF
- Разница между модульными и интеграционными тестами
- Mocking зависимостей в тестах
- Введение
- Что такое деплой?
- Локальная разработка vs. продакшен
- Обзор инструментов для развертывания Django
- Работа со статикой и медиа-файлами
- Разница между static и media файлами
- Где хранить статические и медиа-файлы?
- Настройка settings.py:
- STATIC_URL, STATICFILES_DIRS, STATIC_ROOT
- MEDIA_URL, MEDIA_ROOT
- Использование collectstatic
- DEBUG=True vs. DEBUG=False
- Выбор сервера и подготовка окружения
- Обзор хостинговых решений (VPS, облачные серверы)
- Почему Amazon EC2?
- Регистрация в AWS и создание инстанса
- Подключение к серверу через SSH
- Установка необходимых зависимостей
- Обновление системы
- Установка Python, pip, виртуального окружения
- Установка PostgreSQL и настройка базы данных
- Создание базы данных и пользователя
- Настройка Django-проекта для продакшена
- Создание .env файла для хранения секретных данных
- Разделение settings.py на settings_local.py и settings_prod.py
- Указание ALLOWED_HOSTS и DEBUG=False
- Подключение к PostgreSQL в settings_prod.py
- Запуск Django-проекта на сервере
- Клонирование репозитория
- Настройка виртуального окружения
- Применение миграций
- Тестовый запуск Django через runserver
- Настройка Gunicorn
- Что такое WSGI и почему Gunicorn?
- Установка Gunicorn
- Запуск приложения с Gunicorn
- Демонизация Gunicorn с systemd
- Создание gunicorn.service и gunicorn.socket
- Запуск Gunicorn как службы
- Настройка Nginx как обратного прокси-сервера
- Что такое обратный прокси?
- Установка и настройка Nginx
- Создание конфигурационного файла Nginx
- Настройка проксирования запросов на Gunicorn
- Перезапуск Nginx
- Хранение статики и медиа на AWS S3
- Почему S3 лучше для хранения файлов?
- Создание S3 Bucket
- Настройка django-storages и boto3
- Обновление settings.py для работы с S3
- Проверка работы статики и медиа
- Подключение домена через AWS Route 53
- Регистрация домена
- Настройка DNS-записей
- Обновление ALLOWED_HOSTS в settings_prod.py
- Настройка домена в конфигурации Nginx
- Настройка HTTPS с Certbot
- Почему важен HTTPS?
- Установка Certbot
- Получение SSL-сертификата
- Автоматическое продление сертификатов
- Оптимизация и финальная проверка
- Открытие необходимых портов на сервере
- Проверка логов Nginx и Gunicorn
- Настройка supervisor (по желанию)
- Мониторинг серверных процессов
- Вопросы и ответы
- Разбор ошибок, вопросы слушателей
- Рекомендации по дальнейшему изучению