Крок 8. Background Tasks: Celery + Redis + Browser Notifications¶
Навчальний проєкт: notes_chat_app — той самий, що у Кроках 1–7.
Результат: нагадування для нотаток надсилаються у фоні через Celery Beat, браузер отримує Toast-повідомлення через HTTP polling.
Передумови
Перед початком переконайся, що пройдені:
- Крок 7. Async Django — WebSocket, Channels, Redis
- Потрібен запущений Redis і Docker (вже є з Кроку 7)
Що ти вивчиш¶
- Чому Django-view не може виконувати довгі задачі — модель Request → Response і її обмеження
- Celery — Worker, Beat, Broker, Result Backend
@shared_task— стандарт для Django-проєктів- Celery Beat — планувальник задач за розкладом (cron-подібно)
- Redis DB 0 vs DB 1 — ізоляція Channels і Celery
CELERY_BEAT_SCHEDULEуsettings.py— без зовнішніх пакетів- Browser Notifications через JS polling — коли WebSocket зайвий
- Toast UI — Bootstrap Toast, aria-live, XSS-захист, sessionStorage дедуплікація
- Тестування — unit тести задачі,
@override_settings,mail.outbox, Selenium E2E
Навчальний проєкт¶
Той самий notes_chat_app, що будували з Кроку 1. У цьому кроці додаємо:
notes_project/celery.py— ініціалізація Celery-додаткуnotes_app/tasks.py— фонова задачаsend_reminder_notifications- Нові сервіси
celery-workerіcelery-beatуdocker-compose.yml - JSON endpoint
/reminders/check/для браузерного polling reminders.js— fetch + Bootstrap Toast- Тести:
test_tasks.py, доповнення доtest_views.pyіtest_selenium.py
Архітектура результату¶
Celery Beat (кожну хвилину)
│
▼
@shared_task send_reminder_notifications()
│
├─ email → Console backend (dev)
└─ reminder.is_sent = True
Browser (кожні 60 секунд, HTTP polling)
│
▼
GET /reminders/check/ → JSON [{id, note__title, message, remind_at}]
│
▼
reminders.js → Bootstrap Toast (знизу-праворуч)
Порядок читання¶
- Архітектура Celery — проблема блокування, що таке Celery, ASCII-схема, Redis як broker
- Реалізація —
celery.py,tasks.py,settings.py,docker-compose.ymlкрок за кроком - Browser Notifications — JSON endpoint, JavaScript polling, Toast container
- Тести — unit тести задачі, тести view, Selenium E2E
- Checkpoint — практичне завдання, чеклист самоперевірки