Add user auth, personal cabinet, admin panel and first admin bootstrap
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
{% extends "base.html" %}
|
||||
{% from "macros.html" import format_size %}
|
||||
|
||||
{% block title %}Админка — PhotoHost{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<section class="page-header page-header--admin">
|
||||
<div class="container">
|
||||
<h1 class="page-header__title">Панель администратора</h1>
|
||||
<p class="page-header__subtitle">Управление пользователями и контентом</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="admin-section">
|
||||
<div class="container">
|
||||
{% include "admin/_nav.html" %}
|
||||
{% include "partials/alerts.html" %}
|
||||
|
||||
<div class="admin-stats">
|
||||
<div class="stat-card stat-card--admin">
|
||||
<span class="stat-card__value">{{ stats.users }}</span>
|
||||
<span class="stat-card__label">пользователей</span>
|
||||
</div>
|
||||
<div class="stat-card stat-card--admin">
|
||||
<span class="stat-card__value">{{ stats.photos }}</span>
|
||||
<span class="stat-card__label">фотографий</span>
|
||||
</div>
|
||||
<div class="stat-card stat-card--admin">
|
||||
<span class="stat-card__value">{{ stats.admins }}</span>
|
||||
<span class="stat-card__label">администраторов</span>
|
||||
</div>
|
||||
<div class="stat-card stat-card--admin">
|
||||
<span class="stat-card__value">{{ format_size(stats.storage) }}</span>
|
||||
<span class="stat-card__label">хранилище</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="admin-grid">
|
||||
<div class="admin-panel">
|
||||
<h2 class="admin-panel__title">Новые пользователи</h2>
|
||||
<div class="admin-table-wrap">
|
||||
<table class="admin-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Логин</th>
|
||||
<th>Email</th>
|
||||
<th>Дата</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for user in recent_users %}
|
||||
<tr>
|
||||
<td>{{ user.username }}{% if user.is_admin %} <span class="badge badge--admin">admin</span>{% endif %}</td>
|
||||
<td>{{ user.email }}</td>
|
||||
<td>{{ user.created_at.strftime('%d.%m.%Y') }}</td>
|
||||
</tr>
|
||||
{% else %}
|
||||
<tr><td colspan="3">Нет пользователей</td></tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="admin-panel">
|
||||
<h2 class="admin-panel__title">Последние фото</h2>
|
||||
<div class="admin-mini-gallery">
|
||||
{% for photo in recent_photos %}
|
||||
<a href="{{ photo.url }}" target="_blank" class="admin-mini-gallery__item">
|
||||
<img src="{{ photo.url }}" alt="{{ photo.original_name }}">
|
||||
</a>
|
||||
{% else %}
|
||||
<p class="admin-empty">Нет фотографий</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user