Веб-приложение для поиска и фильтрации фильмов с аналитикой пользовательских запросов.
- MySQL: - хранение структурированных данных о фильмах, категориях, метаданных
- MongoDB: - хранение аналитики поисковых запросов в коллекции final_project_010825-ptm_Serhii_Lanovenkyi
The Movie Archive - это веб-приложение на FastAPI, которое предоставляет функционал для поиска фильмов по названию, фильтрации по жанрам и годам, а также собирает аналитику поисковых запросов.
- Поиск фильмов по названию с частичным совпадением
- Фильтрация фильмов по жанрам и диапазонам лет
- Отображение новых фильмов на главной странице
- Сбор и отображение аналитики поисковых запросов
- Пагинация результатов (10 фильмов на страницу)
- Поиск фильмов по названию - с частичным совпадением
- Фильтрация по жанрам и годам выпуска - гибкая фильтрация с кнопкой "Фильтровать"
- Аналитика поисковых запросов - история и популярные запросы в MongoDB
- Пагинация результатов - 10 фильмов на страницу с навигацией
- Адаптивный интерфейс - современный дизайн
- routers/ - обработка HTTP маршрутов
- databases/ - абстракция работы с базами данных
- utils/ - переиспользуемые функции (валидаторы, хелперы)
- core/ - базовые компоненты (логирование, шаблоны, исключения)
- Валидация всех входных данных (годы, страницы, поисковые запросы)
- Ограничение длины поисковых запросов
- Обработка исключений с централизованными обработчиками ошибок
- Оптимизированные SQL‑запросы
- Асинхронная обработка HTTP‑запросов через FastAPI
- Структурированное логирование ошибок
- Эффективная пагинация с OFFSET/LIMIT
| Компонент | Технология |
|---|---|
| Backend | FastAPI + Uvicorn |
| Frontend | Jinja2 + CSS |
| База данных | MySQL (основная) + MongoDB (аналитика) |
| Python | Python (рекомендуется) |
| NoSQL | PyMongo |
- Python 3.11+ (рекомендуется 3.12)
- **MySQL ** или MariaDB 10.2+
- **MongoDB ** для аналитики
git clone https://github.com/your-username/final_project_front.git
cd final_project_front
python -m venv venv
# Windows
venv\Scripts\activate
Создайте файл .env в корне проекта на основе .env.example:
# MySQL настройки
MYSQL_HOST=localhost
MYSQL_USER=your_username
MYSQL_PASSWORD=your_password
MYSQL_DB=film_database
# MongoDB настройки
MONGODB_URL=mongodb://localhost:27017
MONGODB_DB=film_analyticspython main.pyПриложение будет доступно по адресу: http://127.0.0.1:8000
GET /- главная страница с новыми фильмамиGET /genre/{genre_name}- фильмы по жанру с пагинациейGET /analytics- страница аналитикиGET /analytics/data- JSON данные аналитики
GET|POST /search_title- поиск по названию фильмаGET|POST /search_filter- фильтр по жанру и годам
final_project_front/
├── main.py # Точка входа FastAPI приложения
├── requirements.txt # Зависимости Python
├── README.md # Документация
├── app/
│ ├── core/ # Ядро Логирования
│ │ ├── exceptions.py # Кастомные исключения
│ │ ├── logging.py # Настройка логирования
│ │ └── templates.py # Настройка Jinja2
│ ├── databases/ # Работа с базами данных
│ │ ├── db_mysql.py # MySQL операции
│ │ └── db_mongo.py # MongoDB аналитика
│ ├── exceptions/ # Обработчики исключений
│ │ └── handlers.py # HTTP обработчики ошибок
│ ├── routers/ # Маршруты FastAPI
│ │ ├── home.py # Главная страница
│ │ ├── search.py # Поиск и фильтрация
│ │ ├── analytics.py # Аналитика
│ │ └── static.py # Статические файлы
│ ├── static/ # Статические ресурсы
│ │ ├── style.css # Стили приложения
│ │ └── favicon.ico # Иконка сайта
│ ├── templates/ # HTML шаблоны Jinja2
│ │ ├── base.html # Базовый шаблон
│ │ ├── index.html # Главная страница
│ │ ├── results.html # Результаты поиска
│ │ └── analytics.html # Страница аналитики
│ └── utils/ # Вспомогательные утилиты
│ ├── helpers.py # Общие данные для шаблонов
│ └── validators.py # Валидация входных данных
- Карточки жанров с количеством фильмов и диапазоном лет
- Сетка новых фильмов с пагинацией
- Поисковая строка и фильтры в хедере
- Детальная информация о фильмах (название, жанр, год, рейтинг, длительность, описание)
- Умная пагинация с сохранением параметров поиска
- Кнопка возврата на главную
- Выпадающий список жанров
- Поля для ввода диапазона лет
- Кнопка "Фильтровать" для запуска поиска
- Популярные 5 поисковые запросы с их количеством
- История последних уникальных запросов
- MySQL: хранение структурированных данных о фильмах, категориях, метаданных
- MongoDB: хранение аналитики поисковых запросов в коллекции
final_project_010825-ptm_Serhii_Lanovenkyi
- HTTP запрос → CORS middleware → Router
- Валидация входных параметров
- Поиск данных в MySQL
- Сохранение поискового запроса в MongoDB
- Рендеринг HTML шаблона через Jinja2
- routers/ - обработка HTTP маршрутов
- databases/ - абстракция работы с базами данных
- utils/ - переиспользуемые функции (валидаторы, хелперы)
- core/ - базовые компоненты (логирование, шаблоны, исключения)
Централизованное логирование через app.core.logging:
from app.core.logging import get_logger
logger = get_logger(__name__)
# Пример использования
logger.info("Приложение запущено")
logger.error("Ошибка подключения к базе данных", exc_info=True)MySQL:
mysql -u username -p -h localhost -e "SELECT VERSION();"MongoDB:
mongosh --eval "db.version()"-
Ошибка импорта модулей
- Убедитесь что вы в виртуальном окружении
- Проверьте установку всех зависимостей из
requirements.txt
-
Проблемы с базой данных
- Проверьте наличие файла
.envс правильными учетными данными - Убедитесь что базы данных созданы и доступны
- Проверьте наличие файла
-
Ошибки валидации
- Все входные данные проходят валидацию
- Проверьте корректность формата годов (1900-2100)
- Поисковые запросы не должны быть пустыми
⭐ Если проект был полезен — поставьте звезду репозиторию