Как сделать рассылку email в Django?
мне нужно реализовать рассылку на почту подписчиков на категории Постов, если новый пост появился в данной категории. Вот такие модели у меня есть:
class Category(models.Model):
name = models.CharField(unique=True, null=False, max_length=255)
subscribers = models.ManyToManyField(User)
class Post(models.Model):
author = models.OneToOneField(Author, on_delete=models.CASCADE, null=True)
choice = models.CharField(max_length=255)
post_date = models.DateTimeField()
heading = models.CharField(null=False, max_length=255)
text = models.CharField(max_length=255)
post_rating = models.FloatField()
category = models.ManyToManyField(Category, through='PostCategory'
А это функция, которая должна отвечать за рассылку (из файла views.py):
def mass_sender(request):
if request.user in Category.subscribers.all():
send_mail(
subject=f'Hi {request.user}, we have some news for you!',
message=f'{Post.all()[-1].text}',
from_email='azizauauau@yandex.ru',
recipient_list=['imfyashya@gmail.com']
Вопрос: как заставить эту функцию отправлять письма при добавлении новой категории?
Используйте сигналы Django, а конкретно post_save для Post.
В папке приложения (не путать с папкой проекта) создайте файл signals.py
Добавьте метод ready в файл apps.py:
def ready(self): from . import signals
В signals.py отредактируйте и добавьте:
from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import Post
@receiver(post_save, sender=Post,)
def func_name(sender, instance, created, **kwargs):
if [условие]:
[код для отправки]
Где [условие] - ваше условие при котором должна произойти отправка, а [код для отправки] - код который отправит email.
Для формирования условия - получите категорию для поста, получите подписчиков, отправьте каждому в цикле сообщение.
p.s Каждый раз,при создании нового Post будет срабатывать сигнал, проверять ваше условие и выполнять код внутри него. В вашем случае отправлять почту.