siteforglod/README.md
2026-05-19 09:40:26 +03:00

80 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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`.
- Встроенный список клубов (Ростов-на-Дону) доступен во всех шаблонах через context processor.
## Маршруты и 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.
- Проверка паролей упрощена: отключена `CommonPasswordValidator` (часто используемые пароли не блокируются).
- Телефон проверяется на реальный российский номер: формат +7XXXXXXXXXX, сохраняется в профиль.
## Модели данных (`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 месяцев).
- Контекстный список клубов в Ростове-на-Дону (5 адресов).
## Формы
- `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`).