# FitnessCenter (Django + Bootstrap) Простой сайт фитнес‑клуба с регистрацией, логином и покупкой абонементов. Упакован в Docker. ## Стек и зависимости - Backend: Python 3.13, Django 5.1.4 (`requirements.txt`). - Frontend: Bootstrap 5 (CDN), шрифт Manrope (Google Fonts), кастомный CSS `static/css/main.css`. - БД по умолчанию: SQLite (`db.sqlite3`). Настроена смена на Postgres при необходимости. - Docker: `python:3.13-slim`, entrypoint выполняет миграции и стартует `runserver`. ## Маршруты и HTTP‑запросы Все маршруты определены в `club/urls.py` и подключены через `gymclub/urls.py`. - `GET /` — главная витрина с планами (`views.home`). - `GET /register/` — форма регистрации. `POST /register/` — создаёт пользователя и профиль, логинит, редирект в кабинет. - `GET /login/` — форма входа. `POST /login/` — аутентификация через Django `AuthenticationForm`. - `POST /logout/` (кнопка делает обычный GET, но view вызывает `logout` и редиректит) — выход из аккаунта. - `GET /dashboard/` — личный кабинет (требует авторизации): активный абонемент, история, покупка новых. - `POST /subscribe//` — покупка абонемента, создаёт `Subscription` с расчётом даты окончания. - `admin/` — стандартная Django‑админка для планов/подписок/профилей. Примечания: - Все формы используют CSRF‑токен. - Сообщения пользователю выводятся через Django messages (успех/ошибка). - API JSON не реализован; взаимодействие сервер‑рендерингом HTML. ## Модели данных (`club/models.py`) - `MembershipPlan`: `name`, `description`, `duration_days`, `price`, `created_at`. - `Profile`: `user` (OneToOne), `phone`, `created_at`. - `Subscription`: `user`, `plan`, `start_date`, `end_date`, `created_at`, вычисляемый `is_active`. - Миграция `0002_default_plans` создаёт 3 дефолтных тарифа (1, 3, 12 месяцев). ## Формы - `RegistrationForm` (расширенный `UserCreationForm`): username, имя, фамилия, телефон, email, пароль ×2; автосоздаёт `Profile`. - `LoginForm` (`AuthenticationForm`) с Bootstrap‑классами. ## Шаблоны и статика - Базовый шаблон: `templates/base.html` (шапка, футер, вывод messages). - Страницы: `home.html`, `register.html`, `login.html`, `dashboard.html`. - Статика: `static/css/main.css`, `static/img/logo.jpg`. ## Как запустить в Docker ```bash # 1) Скопируйте пример env cp .env.example .env # 2) Соберите контейнер docker compose build # 3) Запустите docker compose up ``` Приложение будет доступно на http://localhost:8000 ## Локальный запуск без Docker ```bash python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt python manage.py migrate python manage.py runserver ``` ## Переменные окружения - `DJANGO_DEBUG` (True/False) - `DJANGO_ALLOWED_HOSTS` (список через запятую) - `DJANGO_SECRET_KEY` ## Структура проекта - `gymclub/` — настройки Django. - `club/` — модели, формы, views, urls. - `templates/` — Bootstrap‑шаблоны. - `static/` — CSS и логотип. - `docker-compose.yml`, `Dockerfile`, `entrypoint.sh` — контейнеризация. ## Замена БД на Postgres (пример) Добавьте сервис postgres в `docker-compose.yml` и смените `DATABASES` в `gymclub/settings.py` на `django.db.backends.postgresql` с нужными переменными (`HOST`, `PORT`, `USER`, `PASSWORD`, `NAME`).