Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FitLife Gym - Django сайт тренажерного зала

Лабораторная работа №5 по Django. Веб-приложение для управления тренажерным залом.

Описание проекта

FitLife Gym - это полнофункциональный веб-сайт тренажерного зала, разработанный на Django 5.2. Проект включает в себя систему управления клиентами, тренерами, абонементами, тренировками и отзывами.

Функциональность

Для посетителей:

  • Просмотр информации о тренажерном зале
  • Список тренеров и их специализаций
  • Каталог тренировок с фильтрацией по уровню сложности
  • Типы абонементов и цены
  • Оборудование зала
  • Новости и статьи
  • FAQ
  • Вакансии
  • Отзывы клиентов

Для зарегистрированных клиентов:

  • Личный кабинет
  • Покупка абонементов с промокодами
  • Запись на групповые тренировки
  • Выбор персонального тренера
  • Добавление отзывов
  • История абонементов и тренировок

Для тренеров (staff):

  • Панель управления тренера
  • Просмотр своих клиентов
  • Управление расписанием тренировок
  • Создание промокодов
  • Добавление новых тренировок

Для администраторов:

  • Полный доступ к админ-панели Django
  • Статистика времени пользователей на сайте (с графиками)
  • Диаграмма распределения абонементов
  • Управление всеми моделями

Технологии

  • Backend: Django 5.2, Python 3.11
  • Frontend: Bootstrap 5, HTML5, CSS3
  • База данных: SQLite3
  • Визуализация: Matplotlib, Pandas
  • Дополнительно: Django Signals для логирования сессий

Установка и запуск

1. Клонирование репозитория

cd E:\Programming\Python\Projects\Selected-Chapters-Of-Computer-Science-LB2-5\LB5

2. Создание виртуального окружения (если не создано)

python -m venv .venv
.venv\Scripts\activate

3. Установка зависимостей

pip install django pillow matplotlib pandas

4. Применение миграций

python manage.py migrate

5. Создание суперпользователя (если не создан)

python manage.py createsuperuser

6. Загрузка тестовых данных

python manage.py load_test_data

7. Запуск через Docker

docker compose up --build

Миграции и старт выполняются в Dockerfile. База — db.sqlite3 (файл сохраняется в volume). Сайт: http://127.0.0.1:8000/

8. Локальный запуск (без Docker)

pip install -r requirements.txt
python manage.py migrate
python manage.py runserver

Сайт будет доступен по адресу: http://127.0.0.1:8000/

Тесты и покрытие кода (coverage)

Из корня проекта (FitLife), с активированным виртуальным окружением:

pip install -r requirements.txt

Запуск всех тестов

python manage.py test gym -v 2

Ожидаемый результат: все тесты проходят (OK).

Отчёт coverage для преподавателя

Вариант 1 — краткий отчёт в терминале:

coverage run manage.py test gym
coverage report

Вариант 2 — HTML-отчёт (удобно показать в браузере):

coverage run manage.py test gym
coverage html

Откройте файл htmlcov/index.html в браузере — там процент по каждому файлу и подсветка непокрытых строк.

Вариант 3 — одной командой с проверкой порога 80%:

coverage run manage.py test gym && coverage report --fail-under=80

Порог 80% задан в файле .coveragerc (fail_under = 80).

Что показать преподавателю

  1. Скрин или вывод python manage.py test gym -v 2 — все тесты зелёные.
  2. Скрин coverage report — столбец TOTAL ≥ 80%.
  3. При необходимости — открытый htmlcov/index.html.

Текстовый календарь на сайте

На каждой странице под строкой с датой и часовым поясом есть блок «Календарь месяца (текстовая сетка)» — раскройте его, чтобы увидеть сетку дней месяца в формате DD/MM/YYYY (текущий день в квадратных скобках, например [20]).

Учетные данные

Администратор:

  • Username: admin
  • Password: admin

Структура проекта

LB5/
├── gym/                          # Основное приложение
│   ├── migrations/              # Миграции базы данных
│   ├── management/              # Кастомные команды
│   │   └── commands/
│   │       └── load_test_data.py
│   ├── templates/               # HTML шаблоны
│   │   └── gym/
│   │       ├── base.html       # Базовый шаблон
│   │       ├── main.html       # Главная страница
│   │       ├── profile.html    # Профиль пользователя
│   │       └── ...             # Другие шаблоны
│   ├── admin.py                # Настройки админ-панели
│   ├── models.py               # Модели данных
│   ├── views.py                # Представления
│   ├── forms.py                # Формы
│   ├── urls.py                 # URL маршруты
│   └── signals.py              # Сигналы Django
├── LB5/                         # Настройки проекта
│   ├── settings.py             # Конфигурация Django
│   ├── urls.py                 # Главные URL
│   └── wsgi.py
├── media/                       # Загруженные файлы
├── docker-compose.yml           # Web (SQLite)
├── manage.py                    # Утилита управления Django
└── README.md                    # Этот файл

Модели данных

Основные модели:

  • CompanyInfo - информация о компании
  • Trainer - тренеры
  • Client - клиенты
  • MembershipType - типы абонементов
  • Membership - купленные абонементы
  • TrainingType - типы тренировок
  • Training - расписание тренировок
  • Equipment - оборудование
  • Review - отзывы
  • Promocode - промокоды
  • FAQ - часто задаваемые вопросы
  • Article - новости и статьи
  • Vacancy - вакансии
  • UserSessionLog - логи сессий пользователей

Основные URL маршруты

  • / - Главная страница
  • /about/ - О компании
  • /trainings/ - Список тренировок
  • /trainers/ - Список тренеров
  • /memberships/ - Типы абонементов
  • /equipment/ - Оборудование
  • /reviews/ - Отзывы
  • /news/ - Новости
  • /contacts/ - Контакты
  • /register/ - Регистрация
  • /login/ - Вход
  • /profile/ - Профиль пользователя
  • /trainer-dashboard/ - Панель тренера
  • /statistics/ - Статистика (для staff)
  • /admin/ - Админ-панель Django

Особенности реализации

1. Система аутентификации

  • Регистрация с валидацией возраста (18+)
  • Валидация белорусских номеров телефонов
  • Автоматическое создание профиля клиента при регистрации

2. Логирование сессий

  • Автоматическое отслеживание времени входа/выхода
  • Визуализация статистики через Matplotlib
  • Расчет среднего времени на сайте

3. Система промокодов

  • Скидки на абонементы
  • Проверка срока действия
  • Привязка к конкретным типам абонементов

4. Управление тренировками

  • Ограничение количества участников
  • Запись на будущие тренировки
  • Отмена тренировок

5. Отзывы

  • Оценка от 1 до 5 звезд
  • Привязка к тренерам (опционально)
  • Хронологическая сортировка

Автор

Лабораторная работа №5 - Django сайт тренажерного зала (Вариант 3)

Дата создания

14 мая 2026

About

Lab work 5 IGI

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages