⚡ Ключевые команды и классы
pip install djangorestframework-simplejwt — SimpleJWT
pip install drf-yasg — Swagger
python manage.py migrate — миграции authtoken / blacklist
Token.objects.get_or_create(user=user) — создать/получить токен
RefreshToken.for_user(user) — создать JWT пару
request.user — текущий пользователь
@receiver(post_save, sender=User) — обработчик сигнала
send_mail(subject, body, from_email, recipient_list) — отправить письмо
Установка пакетов
| Команда | Назначение |
pip install djangorestframework-simplejwt | JWT-аутентификация |
pip install drf-yasg | Swagger/Redoc документация |
pip install djangorestframework | DRF (если не установлен) |
Аутентификация — основные настройки
| Класс | Заголовок запроса | Когда использовать |
| SessionAuthentication | Cookie + CSRF | Web-приложения Django |
| BasicAuthentication | Authorization: Basic <base64> | Тестирование / разработка |
| TokenAuthentication | Authorization: Token <key> | Простые мобильные/SPA |
| JWTAuthentication | Authorization: Bearer <token> | Scalable API, stateless |
Разрешения
| Класс | Доступ | Ответ при отказе |
| AllowAny | Все | — |
| IsAuthenticated | Аутентифицированные | 401 |
| IsAdminUser | is_staff=True | 403 |
| IsAuthenticatedOrReadOnly | Запись — авт.; чтение — все | 401/403 |
| DjangoModelPermissions | По правам модели Django | 403 |
Методы BasePermission
| Метод | Назначение | Возвращает |
| has_permission(request, view) | Уровень представления | True/False |
| has_object_permission(request, view, obj) | Уровень конкретного объекта | True/False |
SimpleJWT — настройки SIMPLE_JWT
| Ключ | Описание | По умолчанию |
| ACCESS_TOKEN_LIFETIME | Срок действия access-токена | timedelta(minutes=5) |
| REFRESH_TOKEN_LIFETIME | Срок действия refresh-токена | timedelta(days=1) |
| ROTATE_REFRESH_TOKENS | Ротация refresh при обновлении | False |
| BLACKLIST_AFTER_ROTATION | Старый refresh → blacklist | False |
| AUTH_HEADER_TYPES | Тип заголовка | ('Bearer',) |
SimpleJWT — эндпоинты
| URL | View | Назначение |
| api/token/ | TokenObtainPairView | POST логин → access + refresh |
| api/token/refresh/ | TokenRefreshView | POST refresh → новый access |
| api/token/verify/ | TokenVerifyView | POST token → проверка валидности |
Сигналы Django
| Сигнал | Аргументы | Когда |
| pre_save | sender, instance, raw, using, update_fields | До save() |
| post_save | + created (bool) | После save() |
| pre_delete | sender, instance, using | До delete() |
| post_delete | sender, instance, using | После delete() |
| m2m_changed | action, instance, model, pk_set, using | При изменении M2M |
Регистрация сигналов
| Способ | Синтаксис |
| Декоратор @receiver | @receiver(post_save, sender=Model) |
| Метод .connect() | signal.connect(handler_func, sender=Model) |
Email — backend
| Backend | Описание |
| django.core.mail.backends.console.EmailBackend | Письмо → консоль (разработка) |
| django.core.mail.backends.smtp.EmailBackend | Реальный SMTP (продакшн) |
| django.core.mail.backends.dummy.EmailBackend | Тихо игнорирует (тесты) |
Swagger (drf-yasg)
| URL | Описание |
| /swagger/ | Swagger UI — интерактивная документация |
| /redoc/ | Redoc — альтернативный UI документации |
| /swagger.json | Схема в формате JSON |
| /swagger.yaml | Схема в формате YAML |