4.8 KiB
4.8 KiB
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/— аутентификация через DjangoAuthenticationForm.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
# 1) Скопируйте пример env
cp .env.example .env
# 2) Соберите контейнер
docker compose build
# 3) Запустите
docker compose up
Приложение будет доступно на http://localhost:8000
Локальный запуск без Docker
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).