Для развертывания нашего проекта необходимо использовать Docker.
- Для развёртывания проекта проверьте наличие этих приложений:
Docker
Docker Compose
Git
Минимальные системные требования:
CPU: 2 ядра
RAM: 4 ГБ
Место на диске: ~ 5 ГБ
- Шаги для развертывания
Клонируйте репозиторий:
git clone https://github.com/your-username/watcherry.git
Скачайте IMDb Non-Commercial Datasets: https://developer.imdb.com/non-commercial-datasets/#imdb-non-commercial-datasets или же здесь в папке data https://drive.google.com/drive/folders/1-PBGeo6tkWFmXJOI1wop6DKBBUpuhVwH?usp=sharing
Перейдите в папку с проектом:
cd watcherry
Создайте в корневой папке проекта папку data:
mkdir data
Переместите файлы с базой данных туда.
Соберите и запустите контейнеры:
docker-compose up --build
или
docker compose build
docker compose up
Команда выполнит:
- Сборку образов.
- Применение миграций базы данных.
Проверьте доступность проекта: Перейдите в браузере по адресу:
http://localhost:8000 #для бекенда
http://localhost:5137 #для фронтенда
- Описание структуры данных База данных создаётся автоматически с помощью миграций Django.
Файлы .tsv в папке data/ загружаются через скрипт, расположенный в movies/management/commnds/import_movies.py
https://drive.google.com/drive/folders/1-PBGeo6tkWFmXJOI1wop6DKBBUpuhVwH?usp=sharing
Проект создан в рамках дисциплин “Технологии Интернет и WEB-программирования” и “Введение в системы баз данных” студентами Девришевым Туралом, Ладнюк Кирой и Гареевым Эльдаром.
WATCHERRY – это онлайн-платформа для любителей кино. Сервис предоставляет пространство для просмотра информации о фильмах, а также для активного взаимодействия пользователей через оценки, комментарии и обсуждения.
- База данных фильмов: Подробные карточки фильмов с информацией о жанре, годе выпуска, продолжительности, актерах и режиссерах.
- Оценки и рецензии пользователей: Возможность ставить оценки и оставлять текстовые отзывы.
- Комментарии и обсуждения: Комьюнити, где пользователи могут участвовать в обсуждениях.
- Персонализированные рекомендации: Предложения фильмов на основе предпочтений пользователя.
- Списки (опционально): Возможность создавать свои списки фильмов.
- Поиск фильма: Пользователь ищет фильм, просматривает его карточку и может добавить его в избранное или перейти к обсуждению.
- Регистрация: Пользователь регистрируется и получает доступ к основным функциям платформы.
- Оценка и рецензия: Пользователь находит фильм, ставит оценку и оставляет отзыв, который доступен другим пользователям.
- Создание списков фильмов (опционально): Пользователь создает списки фильмов, на основе которых формируются рекомендации.
- Технологии: Vue.js
- Основные компоненты:
- Главная страница: Список популярных фильмов, новинок и персонализированных рекомендаций.
- Страница фильма: Информация о фильме, рейтинги, отзывы.
- Профиль пользователя: Личные списки фильмов, избранное.
- Система комментариев и обсуждений: Возможность оставлять отзывы и участвовать в обсуждениях.
- Технологии: Python (Django)
- Модули:
- API для взаимодействия с клиентом: Работа с данными пользователей, фильмов, комментариев, аутентификация.
- Модуль рейтингов и отзывов: Хранение и отображение оценок и отзывов пользователей.
- ORM Django: Для работы с данными о фильмах, пользователях, отзывах и комментариях.
- Пользователь: Просмотр информации, оставление оценок и отзывов, создание списков фильмов.
- Администратор: Управление системой и пользователями, настройка прав доступа.
- Гость: Просмотр публичного контента.
- Получение списка популярных и новых фильмов
-
Endpoint: GET /api/movies/
-
Класс: MovieListAPIView
-
Описание: Возвращает список популярных фильмов (по голосам) и новых фильмов (по году выпуска).
-
Ответ:
{
"popular_movies": [ ... ],
"new_movies": [ ... ]
}
- Получение детальной информации о фильме
-
Endpoint: GET /api/movies/<title_id>/
-
Класс: MovieDetailAPIView
-
Authentication: JWT (опционально: для проверки наличия рецензии пользователя).
-
Описание: Возвращает информацию о фильме, список рецензий и статус пользователя (например, оставлял ли он рецензию и лайкал ли фильм).
-
Ответ:
{
"movie": { ... },
"reviews": [ ... ],
"isAuthenticated": true,
"userHasReviewed": false,
"liked": true
}
- Поиск фильмов
-
Endpoint: GET /api/movies/search/?q=
-
Класс: SearchMoviesAPIView
-
Описание: Выполняет поиск фильмов по названию, используя строку запроса q.
-
Ответ:
[
{ "id": 1, "title": "Movie Title", "release_year": 2024 },
...
]
- Ошибка при пустом запросе:
{ "detail": "Введите запрос для поиска." }
- Получение и создание рецензий на фильм
-
Endpoint:
- GET /api/movies/<title_id>/reviews/
- POST /api/movies/<title_id>/reviews/
-
Класс: ReviewListCreateAPIView
-
Authentication: JWT (обязательно для POST).
-
Описание:
- GET: Возвращает список рецензий на фильм.
- POST: Создаёт новую рецензию пользователя на фильм.
-
POST-запрос:
{
"text": "Отличный фильм!",
"rating": 10
}
- Ответ на успешный POST:
{
"id": 1,
"text": "Отличный фильм!",
"rating": 5,
"user": 1,
"movie": 1
}
- Получение и создание комментариев к рецензии
-
Endpoint:
- GET /api/reviews/<review_id>/comments/
- POST /api/reviews/<review_id>/comments/
-
Класс: CommentListCreateAPIView
-
Authentication: JWT (обязательно для POST).
-
Описание:
- GET: Возвращает список комментариев к указанной рецензии.
- POST: Создаёт новый комментарий к рецензии.
-
POST-запрос:
{
"text": "Ну... ТАКОЙ СЕБЕ отзыв.... ",
}
- Ответ на успешный POST:
{
"id": 1,
"text": "Ну... ТАКОЙ СЕБЕ отзыв.... ",
"user": 1,
"movie": 1
}
- Вход в систему
-
Endpoint: POST /api/login/
-
Класс: LoginView
-
Описание: Переопределяет поведение стандартного TokenObtainPairView Django Rest Framework для возвращения токена в виде response.token.
-
Ответ:
{
"token": "jwt_token_here"
}
- Регистрация пользователя
-
Endpoint: POST /api/register/
-
Класс: RegisterAPIView
-
Описание: Создание нового пользователя и его профиля.
-
Ответ на успешный запрос:
{
"message": "Регистрация прошла успешно!",
"username": "new_user_name"
}
- Профиль пользователя
-
Endpoint: GET /api/profile/
-
Класс: ProfileAPIView
-
Описание: Получение и отображение информации о профиле пользователя, фильмов и рекомендаций.
-
Ответ
{
"profile": { ... },
"movies_with_reviews": [ ... ],
"liked_movies": [ ... ],
"recommendations": [ ... ]
}
- Рекомендации фильмов
-
Endpoint: GET /api/recommendations/
-
Класс: RecommendationsAPIView
-
Описание: Возвращает список рекомендаций фильмов для текущего пользователя.
-
Ответ:
[
{ "id": 1, "title": "Movie Title", "release_year": 2024 },
...
]
-
Статусы ответа:
- 200 OK - успешный запрос
- 201 Created - успешно создан новый объект
- 400 Bad Request – ошибка ввода данных
- 404 Not Found – объект не найден
- Login.vue – Страница входа
- Описание:
- Компонент отвечает за авторизацию пользователя.
- Основные функции и поведение:
- login() – метод отправляет данные (логин и пароль) на сервер для авторизации. При успешном входе сохраняет токен в localStorage и перенаправляет пользователя на главную страницу.
- v-model – связывает поля ввода с данными username и password.
- Ошибка:
- Показывает сообщение "Неверный логин или пароль" при неудачной авторизации.
- Register.vue – Страница регистрации
-
Описание:
- Компонент позволяет пользователю создать новый аккаунт.
-
Основные функции и поведение:
- register() – проверяет, совпадают ли пароли, отправляет данные на сервер и обрабатывает ответ. При успехе выводит сообщение об успешной регистрации. При ошибке выводит сообщение об ошибке.
- resetForm() – сбрасывает поля формы после успешной регистрации.
- v-model – связывает поля формы с данными (username, email, password, passwordConfirm).
- Profile.vue – Личный кабинет
-
Описание:
- Компонент отображает информацию о пользователе и его активности.
-
Основные функции и поведение:
- mounted() – з агружает профиль пользователя: информацию о пользователе (аватар, никнейм), фильмы, которые пользователь комментировал,понравившиеся фильмы и рекомендации.
- logout() – удаляет токен из localStorage, обновляет глобальное состояние авторизации и перенаправляет на главную страницу.
- Динамический рендеринг: v-if используется для отображения блоков фильмов и рекомендаций только при наличии данных.
- Homepage.vue – Главная страница
-
Описание:
- Компонент показывает популярные и новые фильмы на главной странице.
-
Основные функции и поведение:
- created() – загружает данные о популярных и новых фильмах с сервера.
- isLoading – флаг состояния загрузки.
- error – сообщение об ошибке при неудачной загрузке.
- Динамическое отображение: списки фильмов рендерятся через v-for. Используются ссылки для перехода на страницы конкретных фильмов через router-link.
- Импорт Navbar: Компонент Navbar добавляется для отображения панели навигации.
- SearchResults.vue - Результат поиска по странице
-
Описание:
- Компонент отображает результаты поиска фильмов в зависимости от введенного запроса. Если фильмы не найдены, отображается сообщение о том, что фильмов не найдено.
-
Основные функции и поведение:
- query — строка запроса, по которой будет выполняться поиск фильмов.
- data() определен список movies, в который будут загружены результаты запроса.
- fetchMovies(searchQuery) делает запрос к API для поиска фильмов, если searchQuery не пустой.
- При изменении значения query (используется watch), компонент вызывает fetchMovies() для обновления списка фильмов.
- В mounted() вызов fetchMovies() выполняется при загрузке компонента, если query существует.
- В шаблоне отображаются результаты в виде миниатюр, а также сообщения об отсутствии фильмов или необходимости ввести запрос.
- MovieDetailPage.vue - Страница фильма
-
Описание:
- Компонент отображает подробную информацию о фильме, а также позволяет добавлять фильм в список понравившихся, добавлять отзывы и комментарии к ним.
-
Основные функции и поведение:
- Компонент получает movieId из маршрута и делает запрос для получения информации о фильме.
- В data() хранится информация о фильме (movie), отзывы (reviews), а также формы для добавления нового отзыва и комментария.
- В created() метод fetchMovieDetails запрашивает данные о фильме и отзывы.
- Метод addReview() добавляет новый отзыв, проверяя валидность текста отзыва и рейтинг.
- Метод addComment(reviewId) добавляет комментарий к отзыву, проверяя валидность текста комментария.
- В шаблоне отображаются подробности фильма, включая постер, жанры, рейтинг и продолжительность.
- В секциях отображаются актеры, режиссеры, продюсеры и отзывы к фильму с возможностью добавления новых комментариев.
- Компонент автоматически обновляет данные после успешного добавления отзыва или комментария.
- Язык программирования: Python (Django), Vue.js
- База данных: Используется ORM Django для работы с данными.
- Тестирование: Ручное, Pytest
Рекомендательная система (если успеем): Персонализированные рекомендации на основе понравившихся фильмов пользователя.

