Урок 88. Презентация проекта
⚡ Кратко: суть проекта
Приложение для поиска фильмов — консольная программа на Python, которая ищет фильмы в базе sakila (MySQL) и сохраняет историю поиска в MongoDB.
- Поиск по ключевому слову в названии с пагинацией по 10 фильмов.
- Поиск по жанру и диапазону годов выпуска с пагинацией по 10 фильмов.
- Логирование всех запросов в MongoDB и вывод топ-5 популярных запросов.
- Код разделён на модули, оформлен по PEP8, с обработкой ошибок.
Что запомнить: проект оценивается по 6 критериям, вопросы преподавателя имеют утроенный вес.
Частая ошибка: пренебрегать оформлением кода и не готовиться к презентации.
🎯 Цель проекта
Создать интерактивное консольное приложение для поиска фильмов по базе данных sakila (MySQL) с возможностью:
- Искать фильмы:
- По ключевому слову в названии фильма. Результат ограничен 10 фильмами. По запросу пользователя отображаются следующие 10 результатов, пока не закончатся.
- По жанру и диапазону годов выпуска. Перед вводом пользователь видит список жанров, минимальный и максимальный год в базе. Результат пагинируется по 10 фильмов.
- Сохранять все поисковые запросы в MongoDB в коллекцию
final_project_<your_group>_<your_full_name>. - Выводить список из 5 популярных запросов (по частоте или последним поискам).
🛠️ Технологии
- Python — основной язык приложения.
- MySQL — данные о фильмах (база sakila).
- MongoDB — логирование поисковых запросов.
- PyMySQL, PyMongo — библиотеки для работы с базами данных.
- Дополнительные модули для форматирования вывода в консоль.
📋 Дополнительные требования
1. Соблюдение стиля PEP8
- Отступы, пробелы, длина строк, имена переменных и функций — по стандарту.
- Используются понятные, говорящие имена.
2. Читаемость кода
- Каждая функция выполняет одну понятную задачу.
- Нет лишней вложенности и дублирования.
- Комментарии там, где это необходимо (например, описание логики сложного запроса).
- Блоки (меню, поиск, логирование) разделены по функциям или файлам.
3. Отсутствие дублирования кода
- Повторяющиеся действия (подключение, формат вывода, обработка ошибок) вынесены в отдельные функции.
- Вместо копирования кода используется повторное использование функций.
- Повторяемые параметры вынесены в переменные.
📁 Пример структуры проекта
movie_search/
├── main.py # точка входа, меню, обработка команд
├── mysql_connector.py # подключение к MySQL и функции поиска
├── log_writer.py # запись поисковых запросов в MongoDB
├── log_stats.py # статистика популярных/последних запросов
├── formatter.py # функции форматирования вывода
└── README.md # описание и инструкции по запуску (по желанию)
🗂️ Пример структуры MongoDB-лога
{
"timestamp": "2025-05-01T15:34:00",
"search_type": "keyword",
"params": {
"keyword": "matrix"
},
"results_count": 3
}
🪜 Процесс работы над проектом
Шаг 1: Изучение базы данных
- Подключитесь к MySQL и изучите таблицы, связанные с фильмами:
film,film_category,category. - Определите, откуда брать название, жанр и год выпуска.
- Проверьте реальный диапазон годов в базе.
Шаг 2: Написание SQL-запросов
- Поиск по ключевому слову (часть названия фильма).
- Поиск по жанру и диапазону годов.
- Убедитесь, что запросы корректно работают с пустыми результатами.
Шаг 3: Настройка MongoDB и логирование
- Подключитесь к MongoDB.
- Записывайте каждый запрос: тип, параметры, количество результатов, время.
- Создайте функции для вывода самых популярных и последних уникальных запросов.
Шаг 4: Разработка консольного интерфейса
- Интерактивное меню в
main.py: поиск по ключевому слову, поиск по жанру/годам, статистика, выход. - Обработка ошибок ввода и сбоев подключения без аварийного завершения.
Шаг 5: Структурирование кода и оформление
- Разделите код на модули.
- Соблюдайте читаемость, стиль и избегайте дублирования.
- Добавьте комментарии к ключевым функциям.
Шаг 6 (по желанию): Описание и улучшения
- Напишите
README.mdс целью, инструкциями по запуску и примерами. - Добавьте дополнительные возможности: фильтрация по рейтингу, сортировка, цветной вывод.
⭐ Критерии оценки
6 критериев оцениваются от 1 до 5. Пять критериев вносят равный вклад, ответы на вопросы преподавателя учитываются трижды.
Оценка = сумма баллов по всем критериям / 8
(округляется в меньшую сторону до 0.5)
| Критерий | Что проверяется |
|---|---|
| Сценарии поиска | Все сценарии поиска реализованы корректно, с пагинацией по 10 фильмов. |
| Логирование в MongoDB | Все запросы логируются в нужную коллекцию, логи читаемы. |
| Доступ к статистике | Можно посмотреть 5 популярных запросов (по частоте или последним). |
| Стабильность работы | Программа не падает при ошибках, выводит понятные сообщения. |
| Оформление кода | Код структурирован, читаем, разделён на логические части. |
| Вопросы преподавателя ×3 | Логичные и аргументированные ответы по архитектуре, коду и базам данных. |
⚠️ Качественная реализация дополнительных функций может положительно повлиять на оценку, если основной функционал имеет незначительные недочёты (до 0,1 балла на усмотрение преподавателя).
🎤 Структура презентации (5 минут)
- Приветствие — представьтесь и назовите тему проекта.
- Описание проекта — какую задачу решает приложение, какие технологии используются.
- Демонстрация работы:
- Пример поиска по ключевому слову.
- Пример поиска по жанру и диапазону годов.
- Вывод популярных запросов.
- Архитектура — кратко покажите модули и объясните, зачем код разделён именно так.
- Сложности и открытия — что было непросто, что узнали нового.
- Ответы на вопросы преподавателя.