76 lines
4.3 KiB
Markdown
76 lines
4.3 KiB
Markdown
# 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/<int:plan_id>/` — покупка абонемента, создаёт `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`).
|