📝 Вопросы на самопроверку

🎯 Auth-блок: Уроки 40–45 К оглавлению урока

⚡ Топ-5 вопросов для самопроверки

  1. Чем отличается аутентификация от авторизации? Какой HTTP-статус возвращает каждая?
  2. Из каких трёх частей состоит JWT? Что хранится в payload?
  3. Как работает has_object_permission() — когда DRF его вызывает?
  4. Зачем регистрировать сигналы в AppConfig.ready()? Почему не в models.py?
  5. В чём разница между 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