Урок 88. Презентация проекта

📁 Блок: Финальный проект ⏱️ Время изучения: ~180 мин 🎯 Сложность: Продвинутая
#from #as #and #min #max #count #import #def #return #with #close #try #finally #list

⚡ Кратко: суть проекта

Приложение для поиска фильмов — консольная программа на Python, которая ищет фильмы в базе sakila (MySQL) и сохраняет историю поиска в MongoDB.

  • Поиск по ключевому слову в названии с пагинацией по 10 фильмов.
  • Поиск по жанру и диапазону годов выпуска с пагинацией по 10 фильмов.
  • Логирование всех запросов в MongoDB и вывод топ-5 популярных запросов.
  • Код разделён на модули, оформлен по PEP8, с обработкой ошибок.

Что запомнить: проект оценивается по 6 критериям, вопросы преподавателя имеют утроенный вес.

Частая ошибка: пренебрегать оформлением кода и не готовиться к презентации.

🎯 Цель проекта

Создать интерактивное консольное приложение для поиска фильмов по базе данных sakila (MySQL) с возможностью:

  1. Искать фильмы:
    • По ключевому слову в названии фильма. Результат ограничен 10 фильмами. По запросу пользователя отображаются следующие 10 результатов, пока не закончатся.
    • По жанру и диапазону годов выпуска. Перед вводом пользователь видит список жанров, минимальный и максимальный год в базе. Результат пагинируется по 10 фильмов.
  2. Сохранять все поисковые запросы в MongoDB в коллекцию final_project_<your_group>_<your_full_name>.
  3. Выводить список из 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 минут)

  1. Приветствие — представьтесь и назовите тему проекта.
  2. Описание проекта — какую задачу решает приложение, какие технологии используются.
  3. Демонстрация работы:
    • Пример поиска по ключевому слову.
    • Пример поиска по жанру и диапазону годов.
    • Вывод популярных запросов.
  4. Архитектура — кратко покажите модули и объясните, зачем код разделён именно так.
  5. Сложности и открытия — что было непросто, что узнали нового.
  6. Ответы на вопросы преподавателя.