Автоматическая отправка электронной почты при создании нового сообщения в django - PullRequest
0 голосов
/ 28 марта 2020

Когда я сохраняю свое сообщение, я хочу автоматически отправлять электронную почту для пользователя. Но это не работает. Это мой код

signal.py

from django.db.models.signals import post_save
from django.dispatch import receiver
from mysite.models import Post, Email
from django.core.mail import send_mail
from blog.settings import EMAIL_HOST_USER

@receiver(post_save, sender=Post)
def SendEmail(sender , instance, created, **kwargs):
    if created:
        emails = list(Email.objects.values('email'))
        recepients = []
        for i in range(0, len(emails)):
            recepients.append(emails[i]['email'])
            pass
        send_mail('New post on blog', str(instance.title), EMAIL_HOST_USER, recepients, fail_silently=False)
        pass

1 Ответ

0 голосов
/ 28 марта 2020

Если сам сигнал не работает, это из-за этого:
По умолчанию signals.py не загружается автоматически в ваше приложение, поэтому вам придется импортировать его вручную.
Если ваше приложение называется post, вам необходимо соответствующим образом изменить файл конфигурации вашего приложения (post/apps.py).

Это пример того, как:

# post/apps.py #
from django.apps import AppConfig

class PostConfig(AppConfig):
    name = 'post'    
    def ready(self):
        print(">DEBUG::loading_signals")
        import post.signals
        # other stuff you need imported on app's startup

Если вы все еще не получаете сигналы, попробуйте указать класс конфигурации вашего приложения по умолчанию в файле __init__.py вашего приложения, например:

# post/__init__.py #
default_app_config = "post.apps.PostConfig"

из Django сама документация :

Где должен жить этот код [сигналы]?

Строго говоря, обработка сигналов и Регистрационный код может жить где угодно, хотя рекомендуется избегать модуля root приложения и его моделей, чтобы минимизировать побочные эффекты импорта кода.

На практике обработчики сигналов обычно определяется в подмодуле сигналов приложения, к которому они относятся. Приемники сигналов подключаются в методе ready() вашего класса конфигурации приложения. Если вы используете декоратор receiver(), импортируйте субмодуль сигналов внутри ready().

Список литературы:
https://docs.djangoproject.com/en/3.0/ref/applications/#django .apps.AppConfig.ready
https://docs.djangoproject.com/en/3.0/topics/signals/#connecting -приемник-функции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...