Современное веб-приложение для поиска фильмов из базы данных Sakila с интеграцией TMDB API, умной системой постеров, логированием в MongoDB и продвинутой аналитикой.
- Возможности
- Технологический стек
- Установка
- Структура проекта
- API Endpoints
- Конфигурация
- Документация
- По названию - поиск с постраничной навигацией (10 фильмов на странице)
- По жанру и году - фильтрация с автоматическим определением доступного диапазона лет
- По актёру - поиск фильмов с участием конкретного актёра (отображение имени, а не ID)
- TMDB API интеграция - настоящие постеры фильмов в высоком качестве
- Многоуровневое сопоставление - 60+ вымышленных названий Sakila сопоставлены с реальными фильмами
- Популярные фильмы - автоматический выбор популярных фильмов по году (1997-2006)
- Резервные постеры - красивые эмодзи при отсутствии API ключа
- Кэширование - оптимизация запросов к TMDB API
- Популярные запросы - топ-5 самых частых поисков (уникальные по параметрам)
- Последние поиски - 5 последних уникальных запросов с временем выполнения
- MongoDB логирование - логирование только первой страницы поиска для избежания дублей
- Базовый класс MongoConnection - единое подключение для всех MongoDB операций
- Обработка ошибок подключения - автоматическая проверка соединения с MongoDB
- Адаптивный дизайн - работает на всех устройствах
- Темная тема - профессиональный дизайн
- AJAX навигация - без перезагрузки страницы
- Постеры фильмов - фиксированная высота 400px для единообразия
- Умная типографика - ограничение описаний, выравнивание контента
- FastAPI 0.104+ - современный асинхронный веб-фреймворк
- Python 3.9+ - основной язык программирования
- Uvicorn - ASGI сервер для production
- MySQL 8.0+ - база данных Sakila с фильмами
- MongoDB 4.6+ - логирование и статистика запросов
- HTML5 - семантическая разметка
- CSS3 - Design System, CSS Variables
- Vanilla JavaScript - без фреймворков, чистый ES6+
- TMDB API - The Movie Database для постеров фильмов
fastapi==0.104.1 # Веб-фреймворк
uvicorn==0.24.0 # ASGI сервер
pydantic==2.5.0 # Валидация данных
mysql-connector-python # MySQL драйвер
pymongo==4.6.0 # MongoDB драйвер
requests==2.31.0 # HTTP клиент для TMDB API
- Python 3.9 или выше
- MySQL 8.0+ с базой данных Sakila
- MongoDB 4.6+
- (Опционально) TMDB API ключ для постеров
git clone <repository-url>
cd film-search-projectpython -m venv .venv
# Windows
.venv\Scripts\activate
# Linux/Mac
source .venv/bin/activatepip install -r requirements.txt- Откройте
local_settings.py - Настройте подключения к MySQL и MongoDB
- (Опционально) Настройте TMDB API в
tmdb_config.py
python main.pyПриложение будет доступно по адресу: http://localhost:8000
film-search-project/
├── main.py # Точка входа FastAPI приложения
├── local_settings.py # Конфигурация БД (не в Git)
├── tmdb_config.py # Конфигурация TMDB API (не в Git)
├── requirements.txt # Python зависимости
├── README.md # Этот файл
├── ARCHITECTURE.md # Архитектура приложения
├── TMDB_SETUP.md # Инструкция по настройке TMDB
├── .gitignore # Исключения для Git
│
├── app/ # Основной пакет приложения
│ ├── database/
│ │ ├── mysql_connector.py # DAO для MySQL
│ │ └── mongo_connection.py # Подключение к MongoDB
│ │
│ ├── logging/
│ │ ├── log_writer.py # Запись логов в MongoDB (наследует MongoConnection)
│ │ └── log_stats.py # Получение статистики (наследует MongoConnection)
│ │
│ ├── models/
│ │ └── schemas.py # Pydantic модели
│ │
│ ├── routes/
│ │ └── films.py # API маршруты
│ │
│ └── utils/
│ └── formatter.py # Форматирование и TMDB API
│
└── static/ # Статические файлы
├── index.html # Главная страница
├── css/
│ └── styles.css # Стили
└── js/
└── script.js # JavaScript логика
GET /api/search/keyword?q={keyword}&page={page}
GET /api/search/genre-year?genre={genre}&year_from={year}&year_to={year}&page={page}
GET /api/search/actor?actor_id={id}&page={page}
GET /api/genres # Список всех жанров
GET /api/actors # Список всех актёров
GET /api/year-range # Диапазон лет в БД
GET /api/year-range-for-genre?genre={genre} # Диапазон для жанра
GET /api/stats/popular # Топ-5 популярных запросов
GET /api/stats/recent # 5 последних уникальных поисков
GET / # Главная страница
GET /health # Проверка здоровья приложения
dbconfig = {
'host': 'your-mysql-host',
'user': 'your-username',
'password': 'your-password',
'database': 'sakila'
}MONGODB_URL_READ = 'mongodb://user:pass@host:port/?authSource=db'
MONGODB_URL_WRITE = 'mongodb://user:pass@host:port/?authSource=db'TMDB_API_KEY = "your_api_key_here" # Получите на themoviedb.org- TMDB_SETUP.md - Настройка TMDB API для постеров
- ARCHITECTURE.md - Архитектура приложения (если есть)
Вымышленные названия из Sakila автоматически сопоставляются с реальными фильмами:
ACADEMY DINOSAUR→Jurassic ParkALIEN CENTER→Alien- 60+ готовых сопоставлений
Логирование только первой страницы поиска для избежания дублей:
- Фильтрация по параметру page==1 в LogWriter
- Чистая статистика без дублирующих записей
- Быстрые запросы без сложных aggregation pipeline
- Экономия места в MongoDB
- Базовый класс MongoConnection - единое подключение для всех операций
- Наследование - LogWriter и LogStats наследуют от MongoConnection
- Обработка ошибок - проверка подключения через ping команду
- Таймауты - настроенные таймауты для стабильного подключения
При выборе жанра автоматически обновляются доступные годы выпуска.
- Фиксированная высота 400px для всех постеров
object-fit: coverдля пропорционального обрезания- Fallback на эмодзи при ошибках загрузки
- ✅ Параметризованные SQL запросы (защита от SQL injection)
- ✅ Валидация входных данных через Pydantic
- ✅ CORS настроен для безопасности
- ✅ Секретные данные в
.gitignore - ✅ Обработка всех исключений
- ✅ Отступы 4 пробела
- ✅ Понятные имена переменных и функций
- ✅ Docstrings для всех функций
- ✅ Комментарии к сложной логике
- ✅ Модульная архитектура без дублирования
- ✅ Type hints для параметров и возвращаемых значений
Приложение протестировано на:
- ✅ Поиск по всем критериям
- ✅ Постраничная навигация
- ✅ Обработка ошибок подключения
- ✅ Некорректный ввод пользователя
- ✅ Пустые результаты поиска
- ✅ Статистика и логирование
Проект выполнен как итоговая работа по курсам Python и Database.
MIT License - свободное использование в образовательных целях.
lor2ex - Проект Film Search
Итоговая работа по модулям Python Fundamentals и Database
- ibarbylev - Большое спасибо за отличный курс Python 🐍
- Sakila Database - тестовая база данных MySQL
- TMDB - The Movie Database API
- FastAPI - отличный веб-фреймворк
- WWW - вдохновение для дизайна