Реализована полноценная система мультитенантности на базе 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>
51 lines
2.4 KiB
HTML
51 lines
2.4 KiB
HTML
{% 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 %}
|