Сделал оповещения celery + redis, но сообщения на почту приходят вразнобой.
То прилетают старые, то они дублируются
celery.py
import os
from celery import Celery
# Set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'habr.settings')
app = Celery('habr')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
tasks.py
from blog.models import Answer
from habr import settings
from django.core.mail import send_mail
from habr.celery import app
@app.task
def send_email_after_answer(s):
for i in Answer.objects.all():
send_mail(
'MambrTeam, новый ответ ',
f'Коментарий к {i.post} был добавлен, вот его текст '
f'{i.text}',
settings.EMAIL_HOST_USER,
[i.post.author.email], # находим почту автора статьи
fail_silently=False
)
views
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.post = self.get_object()
self.object.author = self.request.user
self.object.save()
send_email_after_answer.delay(form.instance.post.author.email) #здесь основная строка celery
return super().form_valid(form)
settings
REDIS_HOST = '127.0.0.1'
REDIS_PORT = '6379'
CELERY_BROKER_URL = 'redis://' + REDIS_HOST + ":" + REDIS_PORT + '/0'
CELERY_BROKER_TRANSPORT_OPTIONS = {"visibility_timeout" : 3600}
CELERY_RESULT_BACKEND = 'redis://' + REDIS_HOST + ":" + REDIS_PORT + '/0'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'