📝 Вопросы на самопроверку
⚡ Топ-5 вопросов для самопроверки
- Чем отличается аутентификация от авторизации? Какой HTTP-статус возвращает каждая?
- Из каких трёх частей состоит JWT? Что хранится в payload?
- Как работает has_object_permission() — когда DRF его вызывает?
- Зачем регистрировать сигналы в AppConfig.ready()? Почему не в models.py?
- В чём разница между ACCESS_TOKEN_LIFETIME и REFRESH_TOKEN_LIFETIME?
Вопросы по блоку Auth
Часть 1: Аутентификация
Вопрос 1
Чем отличается аутентификация от авторизации? Каков порядок их выполнения в DRF? Какой HTTP-статус возвращается при неудаче каждой?
Подсказка
Вспомните DEFAULT_AUTHENTICATION_CLASSES и DEFAULT_PERMISSION_CLASSES. Коды 401 и 403.
Вопрос 2
Какие четыре встроенных класса аутентификации есть в DRF? Для каких сценариев подходит каждый?
Подсказка
Session, Basic, Token, RemoteUser. Думайте о мобильных приложениях, web-приложениях, SSO.
Вопрос 3
Как настроить TokenAuthentication? Какой INSTALLED_APP нужно добавить и почему?
Подсказка
'rest_framework.authtoken' — создаёт таблицу authtoken_token в БД.
Вопрос 4
Из каких трёх частей состоит JWT? Что содержится в каждой? Что такое claims (утверждения)?
Подсказка
header.payload.signature. Claims: sub, iat, exp + произвольные.
Вопрос 5
В чём разница между access-токеном и refresh-токеном в SimpleJWT? Зачем нужна ротация refresh-токенов?
Подсказка
Access — короткий (5 мин), refresh — длинный (1 день). ROTATE_REFRESH_TOKENS + BLACKLIST_AFTER_ROTATION.
Часть 2: Разрешения
Вопрос 6
Перечислите встроенные классы разрешений DRF. Что произойдёт, если неаутентифицированный пользователь обратится к view с IsAuthenticated?
Подсказка
AllowAny, IsAuthenticated, IsAdminUser, IsAuthenticatedOrReadOnly. Ответ: 401.
Вопрос 7
Что такое разрешения на уровне объекта? Какой метод BasePermission отвечает за них? Когда DRF вызывает has_object_permission()?
Подсказка
has_object_permission(request, view, obj) вызывается при обращении к конкретному объекту (get_object()).
Вопрос 8
Как через request.user автоматически назначить владельца при создании объекта? Какой метод ViewSet нужно переопределить?
Подсказка
perform_create(self, serializer) → serializer.save(owner=self.request.user)
Вопрос 9
Что такое DjangoModelPermissions? Чем отличается от IsAuthenticated? Какие базовые разрешения предоставляет Django Admin для каждой модели?
Подсказка
view/add/change/delete. DjangoModelPermissions проверяет права конкретного пользователя на модель.
Часть 3: Сигналы и Email
Вопрос 10
Назовите 5 основных сигналов Django. Какие аргументы получает обработчик post_save? Что означает аргумент created?
Подсказка
pre_save, post_save, pre_delete, post_delete, m2m_changed. created=True при первом сохранении.
Вопрос 11
Зачем регистрировать сигналы в AppConfig.ready()? Что будет, если импортировать сигналы в models.py?
Подсказка
Circular imports. AppConfig.ready() вызывается после полной инициализации всех приложений.
Вопрос 12
Как отправить email при создании объекта в Django? Какой backend использовать при разработке, чтобы письма не отправлялись, а выводились в консоль?
Подсказка
send_mail() в обработчике post_save. EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
Вопрос 13
Как с помощью сигнала автоматически создавать Token DRF при регистрации нового пользователя?
Подсказка
@receiver(post_save, sender=User) + if created: Token.objects.create(user=instance)
Часть 4: Swagger
Вопрос 14
Какая библиотека используется для интеграции Swagger с DRF? Как настроить маршруты для /swagger/ и /redoc/?
Подсказка
drf-yasg. get_schema_view() → .with_ui('swagger'/'redoc')
Вопрос 15 (итоговый)
Опишите полный цикл: пользователь регистрируется, получает JWT в httpOnly-куки, делает запрос к защищённому эндпоинту, токен истекает, пользователь обновляет его через refresh, затем выходит (logout → blacklist). Какие компоненты задействованы на каждом шаге?
Подсказка
RegisterView → set_cookie → JWTMiddleware → TokenRefreshView → LogoutView + delete_cookie + blacklist