📝 Практикум 9: задачи

13 задач: BasicAuth (1.1–1.3) · TokenAuth (2.1–2.4) · JWT (3.1–3.4) · Permissions (4.1–4.3)

⚡ Все задачи — кратко

Контекст: Реализуйте авторизацию тремя способами или выберите один для всего приложения. Расставьте по представлениям классы авторизации и разрешения.

  1. 1.1: Настройка BasicAuthentication в settings.py
  2. 1.2: Применение BasicAuthentication к ProductListCreateView
  3. 1.3: Получение доступа через Postman с заголовком Authorization: Basic
  4. 2.1: Настройка TokenAuthentication + authtoken + миграции
  5. 2.2: Маршрут obtain_auth_token в urls.py
  6. 2.3: Применение TokenAuthentication к ProductListCreateView
  7. 2.4: Получение доступа через Postman с заголовком Authorization: Token
  8. 3.1: Настройка JWTAuthentication (SimpleJWT) в settings.py
  9. 3.2: Маршруты TokenObtainPairView и TokenRefreshView в urls.py
  10. 3.3: Применение JWTAuthentication к OrderListCreateView
  11. 3.4: Получение доступа через Postman с заголовком Authorization: Bearer
  12. 4.1: IsAuthenticatedOrReadOnly для ProductDetailDetailUpdateDeleteView
  13. 4.2: IsAdminUser для SupplierViewSet
  14. 4.3: Настройка разрешений для остальных представлений
Задача практикума: Реализуйте авторизацию тремя способами или выберите один для всего приложения. Расставьте по представлениям классы авторизации и разрешения.

Задание 1: BasicAuthentication

Задание 1.1 — Настройка BasicAuthentication

Настройте базовую аутентификацию.

  1. Откройте файл settings.py.
  2. Добавьте BasicAuthentication в настройки.

Файл: settings.py

→ Посмотреть решение

Задание 1.2 — Применение BasicAuthentication к представлению

Примените BasicAuthentication к существующему представлению для Product.

Файл: store/views.py

→ Посмотреть решение

Задание 1.3 — Получение доступа с помощью BasicAuthentication

Попробуйте получить доступ к маршруту /products/ через Postman, передавая заголовок Authorization.

Инструкции:

  1. Используйте Postman для выполнения GET-запроса.
  2. Добавьте заголовок Authorization в формате Basic base64encoded(username:password).

→ Посмотреть решение

Задание 2: TokenAuthentication

Задание 2.1 — Настройка TokenAuthentication

Настройте аутентификацию с использованием токенов.

  1. Добавьте приложение rest_framework.authtoken в INSTALLED_APPS в settings.py.
  2. Выполните миграции для создания таблицы токенов.
  3. Добавьте TokenAuthentication в настройки.

Файл: settings.py

→ Посмотреть решение

Задание 2.2 — Получение токена

Настройте получение токена с использованием встроенного представления obtain_auth_token.

Файл: store/urls.py

→ Посмотреть решение

Задание 2.3 — Применение TokenAuthentication к представлению

Примените TokenAuthentication к существующему представлению для Product.

Файл: store/views.py

→ Посмотреть решение

Задание 2.4 — Получение доступа с помощью токена

Используйте полученный токен для доступа к защищённому маршруту /products/ через Postman, передавая заголовок Authorization в формате Token <your_token>.

Инструкции:

  1. Получите токен через маршрут /api-token-auth/.
  2. Используйте Postman для выполнения GET-запроса.
  3. Добавьте заголовок Authorization в формате Token <your_token>.

→ Посмотреть решение

Задание 3: JWT-аутентификация

Задание 3.1 — Настройка JWT-аутентификации

Настройте аутентификацию с использованием JWT.

  1. Установите пакет djangorestframework-simplejwt.
  2. Добавьте настройки для JWTAuthentication.

Файл: settings.py

→ Посмотреть решение

Задание 3.2 — Маршруты для JWT

Настройте маршруты для получения и обновления JWT.

Файл: store/urls.py

→ Посмотреть решение

Задание 3.3 — Применение JWT-аутентификации к представлению

Примените JWTAuthentication к существующему представлению для Order.

Файл: store/views.py

→ Посмотреть решение

Задание 3.4 — Получение доступа с помощью JWT

Используйте полученный JWT для доступа к защищённому маршруту /orders/ через Postman, передавая заголовок Authorization в формате Bearer <your_token>.

Инструкции:

  1. Получите JWT через маршрут /api/token/.
  2. Используйте Postman для выполнения GET-запроса.
  3. Добавьте заголовок Authorization в формате Bearer <your_token>.

→ Посмотреть решение

Задание 4: Разрешения на уровне представления

Задание 4.1 — Использование IsAuthenticatedOrReadOnly

Настройте разрешения для представления ProductDetail, чтобы только аутентифицированные пользователи могли изменять данные.

Файл: store/views.py

Класс: ProductDetailDetailUpdateDeleteView

→ Посмотреть решение

Задание 4.2 — Использование IsAdminUser

Настройте представление SupplierViewSet, чтобы только администраторы могли изменять данные.

Файл: store/views.py

Класс: SupplierViewSet

→ Посмотреть решение

Задание 4.3 — Использование разрешений для остальных представлений

Настройте разрешения для остальных представлений, обсудив какие необходимо применить.

Подсказка: Для каждого представления подумайте: должны ли анонимные пользователи иметь доступ к GET-запросам? Нужны ли ограничения для POST/PUT/DELETE? Есть ли представления только для администраторов?

→ Посмотреть решение

← К оглавлению урока    Решения →