Django Admin — Адміністрування¶
Django Admin — автоматично згенерований інтерфейс для керування даними у базі. Доступний за адресою:
http://127.0.0.1:8000/admin/
1. Що таке Django Admin?¶
Уяви, що у тебе є додаток з 1000 нотатками. Тобі потрібно знайти і видалити спам-нотатки або призначити права модератора певному юзеру. Без Admin довелося б писати окремі views для цього.
Django Admin — це готовий інтерфейс де ти можеш: - Переглядати та редагувати будь-який запис у БД - Шукати та фільтрувати дані - Керувати юзерами та їх правами - Виконувати масові операції (наприклад, видалити 50 спам-нотаток одним кліком)
2. Хто має доступ до Admin?¶
# Два типи привілейованих юзерів:
user.is_staff = True
# ↑ Може заходити на /admin/
# ↑ Але НЕ має жодних прав без явного призначення!
user.is_superuser = True
# ↑ Автоматично має ВСІ права в системі
# ↑ Навіть ті, що не призначені явно
# ↑ has_perm() завжди повертає True
Критичне правило:
Ніколи не використовуй суперюзера для щоденної роботи!
Причина: якщо суперюзер тестує функціонал — has_perm() завжди True. Це маскує баги авторизації. Реальний юзер без прав може натрапити на помилку, яку ти не бачив при тестуванні від суперюзера.
Відмінності:¶
| Атрибут | Доступ до /admin/ | Права |
|---|---|---|
is_staff=True |
✓ | Тільки явно призначені |
is_superuser=True |
✓ | Всі права автоматично |
| Звичайний юзер | ✗ | Немає |
3. Як зареєструвати модель в Admin¶
# notes_app/admin.py
from django.contrib import admin
from .models import Note
# Простий спосіб — базова реєстрація:
admin.site.register(Note)
# Розширений спосіб — з кастомізацією:
@admin.register(Note)
class NoteAdmin(admin.ModelAdmin):
list_display = ('title', 'user', 'group', 'priority', 'created_at')
# ↑ Які стовпці показувати у списку
list_filter = ('priority', 'group', 'is_pinned')
# ↑ Фільтри у правій панелі (/admin/notes_app/note/?priority=4)
search_fields = ('title', 'content', 'user__username')
# ↑ Пошук по цих полях
# user__username → пошук через FK (нотатки юзера з іменем 'alice')
raw_id_fields = ('user', 'notebook')
# ↑ Для FK показує поле вводу ID замість select (швидше при 1000+ записах)
Що отримаємо у /admin/:
[ ] | Заголовок | Юзер | Група | Пріоритет | Дата
[ ] | Зустріч з клієнтом | alice | Робота | Терміново | 2025-06-03
[ ] | Купити молоко | alice | Сімя | Низький | 2025-06-02
4. Управління юзерами та правами через Admin¶
Як призначити права юзеру через Admin:
1. /admin/auth/user/42/change/
2. Розділ "Permissions" → поставити ✓ навпроти потрібних дозволів
3. Або додати юзера до групи (Group) яка вже має потрібні права
5. Створення суперюзера (командний рядок)¶
# Перший запуск:
cd crispy_notes_chat_app/
python manage.py createsuperuser
# Django запитає:
Username: admin
Email: admin@example.com
Password: (мінімум 8 символів)
# Відкрий браузер:
# http://127.0.0.1:8000/admin/
Де це в нашому проєкті?¶
| Файл | Що є |
|---|---|
notes_app/admin.py |
Реєстрація моделей (Note, Notebook, Tag тощо) |
notes_chat_app/urls.py |
path('admin/', admin.site.urls) |
settings.py |
django.contrib.admin у INSTALLED_APPS |