Перейти к основному контенту
← Блог
Статья

Отложенные публикации в Django: Celery Beat на практике

Как я построил систему автоматической публикации постов в заданное время на Celery Beat — архитектура, код и подводные камни.

Отложенные публикации в Django: Celery Beat на практике

Во многих CMS есть функция «опубликовать позже». Чтобы построить её в Django с нуля, нужны три компонента:

1. Поле статуса

status = models.CharField(choices=[draft, scheduled, published, archived])
publish_at = models.DateTimeField(null=True)

2. Задача Beat

Каждые 60 секунд находим посты с status=scheduled AND publish_at <= now и публикуем их.

3. Идемпотентность

Главный подводный камень: даже если задача запустится дважды, пост не должен разослаться два раза. Для этого — get_or_create и unique constraint.

Полный код на GitHub — пишите, если есть вопросы!

  • #Django
  • #Nuxt 3