Files
octopus/myproject/tenants/templates/tenants/registration_success.html
Andrey Smakotin 097d4ea304 feat: Добавить систему мультитенантности с регистрацией магазинов
Реализована полноценная система мультитенантности на базе django-tenants.
Каждый магазин получает изолированную схему БД и поддомен.

Основные компоненты:

Django-tenants интеграция:
- Модели Client (тенант) и Domain в приложении tenants/
- Разделение на SHARED_APPS и TENANT_APPS
- Public schema для общей админки
- Tenant schemas для изолированных данных магазинов

Система регистрации магазинов:
- Публичная форма регистрации на /register/
- Модель TenantRegistration для заявок со статусами (pending/approved/rejected)
- Валидация schema_name (латиница, 3-63 символа, уникальность)
- Проверка на зарезервированные имена (admin, api, www и т.д.)
- Админ-панель для модерации заявок с кнопками активации/отклонения

Система подписок:
- Модель Subscription с планами (триал 90 дней, месяц, квартал, год)
- Автоматическое создание триальной подписки при активации
- Методы is_expired() и days_left() для проверки статуса
- Цветовая индикация в админке (зеленый/оранжевый/красный)

Приложения:
- tenants/ - управление тенантами, регистрация, подписки
- shops/ - точки магазинов/самовывоза (tenant app)
- Обновлены миграции для всех приложений

Утилиты:
- switch_to_tenant.py - переключение между схемами тенантов
- Обновлены image_processor и image_service

Конфигурация:
- urls_public.py - роуты для public schema (админка + регистрация)
- urls.py - роуты для tenant schemas (магазины)
- requirements.txt - добавлены django-tenants, django-environ, phonenumber-field

Документация:
- DJANGO_TENANTS_SETUP.md - настройка мультитенантности
- TENANT_REGISTRATION_GUIDE.md - руководство по регистрации
- QUICK_START.md - быстрый старт
- START_HERE.md - общая документация

Использование:
1. Пользователь: http://localhost:8000/register/ → заполняет форму
2. Админ: http://localhost:8000/admin/ → активирует заявку
3. Результат: http://{schema_name}.localhost:8000/ - готовый магазин

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-27 19:13:10 +03:00

51 lines
2.4 KiB
HTML
Raw Permalink 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.
{% extends "tenants/base.html" %}
{% block title %}Заявка отправлена{% endblock %}
{% block content %}
<div class="card">
<div class="card-header text-center">
<h3 class="mb-0">Спасибо за регистрацию!</h3>
</div>
<div class="card-body p-5 text-center">
<div class="mb-4">
<svg xmlns="http://www.w3.org/2000/svg" width="80" height="80" fill="currentColor" class="bi bi-check-circle text-success" viewBox="0 0 16 16">
<path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z"/>
<path d="M10.97 4.97a.235.235 0 0 0-.02.022L7.477 9.417 5.384 7.323a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05z"/>
</svg>
</div>
<h4 class="mb-3">Ваша заявка успешно отправлена!</h4>
<p class="lead mb-4">
Мы получили вашу заявку на создание магазина.<br>
Наш администратор проверит данные и активирует ваш магазин.
</p>
<div class="alert alert-info" role="alert">
<h5 class="alert-heading">Что дальше?</h5>
<hr>
<ul class="list-unstyled text-start mb-0">
<li class="mb-2">В течение 24 часов администратор проверит вашу заявку</li>
<li class="mb-2">✓ После активации вы получите письмо на указанный email</li>
<li class="mb-2">В письме будет ссылка на ваш магазин и инструкции</li>
<li>✓ Вам будет предоставлен триальный период на 90 дней</li>
</ul>
</div>
<div class="mt-4">
<a href="{% url 'tenants:register' %}" class="btn btn-outline-primary">
Подать еще одну заявку
</a>
</div>
<div class="mt-4">
<small class="text-muted">
Если у вас возникли вопросы, свяжитесь с нами:<br>
<a href="mailto:support@inventory.by">support@inventory.by</a>
</small>
</div>
</div>
</div>
{% endblock %}