Добавление папки platform_admin
This commit is contained in:
75
myproject/platform_admin/views.py
Normal file
75
myproject/platform_admin/views.py
Normal file
@@ -0,0 +1,75 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Views для аутентификации администраторов платформы.
|
||||
"""
|
||||
from django.shortcuts import render, redirect
|
||||
from django.contrib.auth import login, logout
|
||||
from django.contrib import messages
|
||||
from django.db import connection
|
||||
|
||||
from .forms import PlatformAdminLoginForm
|
||||
from .models import PlatformAdmin
|
||||
|
||||
|
||||
def platform_login_view(request):
|
||||
"""
|
||||
Страница входа для администраторов платформы.
|
||||
|
||||
Доступна только на public домене.
|
||||
"""
|
||||
# Проверяем что мы на public домене
|
||||
schema_name = getattr(connection, 'schema_name', 'public')
|
||||
if schema_name != 'public':
|
||||
messages.error(request, 'Вход для администраторов платформы доступен только на главном домене.')
|
||||
return redirect('/')
|
||||
|
||||
# Если пользователь уже залогинен как PlatformAdmin
|
||||
if request.user.is_authenticated and isinstance(request.user, PlatformAdmin):
|
||||
return redirect('platform_admin:dashboard')
|
||||
|
||||
if request.method == 'POST':
|
||||
form = PlatformAdminLoginForm(request, data=request.POST)
|
||||
if form.is_valid():
|
||||
user = form.get_user()
|
||||
login(request, user, backend='platform_admin.backends.PlatformAdminBackend')
|
||||
messages.success(request, f'Добро пожаловать, {user.name}!')
|
||||
|
||||
next_url = request.GET.get('next')
|
||||
if next_url:
|
||||
return redirect(next_url)
|
||||
return redirect('platform_admin:dashboard')
|
||||
else:
|
||||
form = PlatformAdminLoginForm(request)
|
||||
|
||||
return render(request, 'platform_admin/login.html', {'form': form})
|
||||
|
||||
|
||||
def platform_logout_view(request):
|
||||
"""
|
||||
Выход администратора платформы.
|
||||
"""
|
||||
logout(request)
|
||||
messages.info(request, 'Вы вышли из системы.')
|
||||
return redirect('platform_admin:login')
|
||||
|
||||
|
||||
def dashboard_view(request):
|
||||
"""
|
||||
Главная страница панели администратора платформы.
|
||||
|
||||
Показывает статистику по тенантам, заявкам и подпискам.
|
||||
"""
|
||||
# Проверяем что пользователь - PlatformAdmin
|
||||
if not request.user.is_authenticated or not isinstance(request.user, PlatformAdmin):
|
||||
return redirect('platform_admin:login')
|
||||
|
||||
from tenants.models import Client, TenantRegistration, Subscription
|
||||
|
||||
context = {
|
||||
'total_tenants': Client.objects.exclude(schema_name='public').count(),
|
||||
'active_tenants': Client.objects.filter(is_active=True).exclude(schema_name='public').count(),
|
||||
'pending_registrations': TenantRegistration.objects.filter(status='pending').count(),
|
||||
'active_subscriptions': Subscription.objects.filter(is_active=True).count(),
|
||||
}
|
||||
|
||||
return render(request, 'platform_admin/dashboard.html', context)
|
||||
Reference in New Issue
Block a user