🏠 Итоговая самопроверка — Финал курса

🎯 Финальный чек-лист навыков Python Advanced К оглавлению урока
Это не LMS-задание. Summary-урок завершает блок, а не добавляет новое ДЗ. Вместо этого здесь — финальный чек-лист навыков всего курса и задания для самостоятельной практики на основе реального ДЗ из лекции.

⚡ Итоговые задания из лекции

  • ДЗ из лекции 1: JWT-аутентификация — SimpleJWT, /api/token/, /api/token/refresh/, permissions.
  • ДЗ из лекции 2: request.user + object-level permissions + Swagger (drf-yasg).
  • ДЗ из лекции 3: Регистрация, логин с JWT в куки, logout с blacklist.
  • ДЗ из лекции 4: Сигналы — статус задачи → email-уведомление владельцу.
  • Финальный тест по модулю Auth + анкета обратной связи.

Задания из лекции (для самостоятельной практики)

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

Цель: Настроить JWT-аутентификацию с SimpleJWT и реализовать permissions для защиты API.

  1. Установить djangorestframework-simplejwt.
  2. Добавить JWTAuthentication в DEFAULT_AUTHENTICATION_CLASSES.
  3. Настроить SIMPLE_JWT: ACCESS_TOKEN_LIFETIME, REFRESH_TOKEN_LIFETIME.
  4. Добавить маршруты /api/token/ и /api/token/refresh/.
  5. Применить IsAuthenticated ко всем представлениям задач.
  6. Настроить глобальную пагинацию (PageNumberPagination, 5 элементов на страницу).

Проверка: В Postman — POST /api/token/ → получить access и refresh → GET /tasks/ с Bearer токеном → 200 OK.

Задание 2: request.user + Permissions + Swagger

Цель: Реализовать авторизацию с извлечением текущего пользователя и интегрировать Swagger.

  1. Обновить модели Task и SubTask: добавить поле owner = ForeignKey(User).
  2. Обновить сериализаторы: owner → read_only=True.
  3. Переопределить perform_create() → serializer.save(owner=self.request.user).
  4. Создать view UserTaskListView: возвращает только задачи текущего пользователя.
  5. Создать IsOwnerOrReadOnly permission → применить к Task/SubTask views.
  6. Установить drf-yasg, настроить /swagger/ и /redoc/.

Проверка: Postman — токен пользователя A → PUT /tasks/1/ (принадлежит B) → 403 Forbidden.

Задание 3: Регистрация, логин, logout с JWT

Цель: Полный цикл аутентификации через JWT в httpOnly-куки.

  1. RegisterView: валидация полей (уникальность email/username, сложность пароля), хэширование, JWT в куки при ответе.
  2. LoginView: authenticate() → RefreshToken.for_user() → set_cookie(httponly=True).
  3. JWTAuthenticationMiddleware: автоматически извлекает access из куки, добавляет в заголовок Authorization.
  4. LogoutView: delete_cookie() + помещение refresh в blacklist.

Проверка: POST /api/register/ → куки установлены → GET /api/books/ без заголовка → 200 (middleware подставил токен) → POST /api/logout/ → GET /api/books/ → 401.

Задание 4: Сигналы + Email

Цель: Реализовать автоматические email-уведомления при изменении статуса задачи.

  1. Создать сигнал на post_save для модели Task.
  2. При изменении статуса (или закрытии) — отправить email на адрес владельца задачи.
  3. Добавить проверку: не отправлять повторно, если статус не изменился (сравнить с предыдущим значением через pre_save).
  4. Настроить EMAIL_BACKEND = console.EmailBackend для тестирования.
  5. Зарегистрировать сигналы в AppConfig.ready().

Проверка: Изменить статус задачи через shell или Postman → в консоли Django-сервера появляется письмо с шаблоном уведомления.

Подготовка окружения

# 1. Создать и активировать виртуальное окружение
python -m venv venv
venv\Scripts\activate       # Windows

# 2. Установить зависимости
pip install django djangorestframework
pip install djangorestframework-simplejwt
pip install drf-yasg

# 3. Создать requirements.txt
pip freeze > requirements.txt

# 4. Применить миграции
python manage.py makemigrations
python manage.py migrate

# 5. Создать суперпользователя для тестирования
python manage.py createsuperuser

# 6. Запустить сервер разработки
python manage.py runserver

Проверка в VS Code и Postman

VS Code — запуск и отладка

  1. Открыть папку проекта в VS Code.
  2. Выбрать интерпретатор Python из venv (Ctrl+Shift+P → "Python: Select Interpreter").
  3. В терминале: python manage.py runserver.
  4. Для отладки — создать .vscode/launch.json:
    {
      "version": "0.2.0",
      "configurations": [{
        "name": "Django",
        "type": "debugpy",
        "request": "launch",
        "program": "${workspaceFolder}/manage.py",
        "args": ["runserver"],
        "django": true
      }]
    }
  5. F5 — запустить сервер с отладчиком. Точки останова в signals.py/views.py.

Postman — тестирование JWT

  1. POST http://127.0.0.1:8000/api/token/ → Body (form-data): username, password → Скопировать "access" из ответа.
  2. GET http://127.0.0.1:8000/api/tasks/ → Headers: Authorization: Bearer <access> → 200 OK.
  3. POST http://127.0.0.1:8000/api/token/refresh/ → Body: {"refresh": "<refresh_token>"} → Получить новый access.
  4. Swagger UI: открыть http://127.0.0.1:8000/swagger/ → Authorize → Bearer <access> → тестировать эндпоинты.

Связь с теорией и примерами курса


Поздравляем с завершением курса!

Вы прошли все 46 уроков Python Advanced — от основ Flask до полноценного Auth-API на Django REST Framework.


Что вы освоили:

  • Flask: маршрутизация, шаблоны Jinja2, Pydantic, blueprints
  • SQLAlchemy: модели, запросы, миграции Alembic
  • Django: MVT, ORM, Admin, формы, middleware
  • DRF: сериализаторы, ViewSets, Generic Views, роутеры
  • DRF: фильтрация, пагинация, транзакции, логирование
  • Auth: JWT, разрешения, сигналы, email

← Вернуться к оглавлению курса