Где лучшее место для отправки электронной почты в django-rest-framework? - PullRequest
0 голосов
/ 12 октября 2018

Я хочу отправлять электронные письма в django rest framework, например, когда кто-то создает учетную запись или комментирует что-то и т. Д. Я нашел this в документах django.Но я не знаю, где его использовать.может быть, в Viewset, но каким способом.

, так как лучше и где лучше всего отправлять электронную почту в Django Rest Framework?

Ответы [ 3 ]

0 голосов
/ 12 октября 2018

Предполагая, что «Создание учетной записи» и «Комментирование чего-либо» одновременно создают некоторый экземпляр модели, вы можете использовать существующие сигналы модели .

Если вам нужно перехватить события, которые еще не отправили сигнал, вам придется определить новые сигналы и отправить их из соответствующего места (это зависит от того, что вас интересуетпоэтому здесь нет единого ответа для всех).

Кроме того, если у вас есть несколько писем для отправки одновременно, вы можете рассмотреть возможность использования какой-либо очереди асинхронных задач для отправки писем -это позволяет избежать задержки ответа (сигналы django НЕ являются асинхронными).

0 голосов
/ 12 октября 2018

Я хотел бы дать вам пару советов (конечно, по причинам):

  1. Это равно synchronous.Может быть, это было бы нежелательно / эффективно.Я бы посоветовал вам использовать что-то вроде этого пакета (django-anymail) , это отсоединит вашего отправителя электронной почты.Предположим теперь, что вы используете AWS SES, завтра вы хотите переключиться на sendgrid, тогда вам нужно будет только изменить установочные переменные с помощью этого.

  2. Предположим, User, Commentкаждая из них - отдельные модели.Я бы посоветовал вам переопределить метод save() этих моделей и отправить электронное письмо оттуда.Я не предлагаю signals, потому что я чувствую (полностью личное мнение), что сигналы должны использоваться, когда доступ к источнику невозможен, например, какое-то событие в сторонней библиотеке и т. Д.

0 голосов
/ 12 октября 2018

Вы можете зарегистрировать функцию отправки для некоторых сигналов django или Вы можете вызвать ее в представлениях на основе классов или в представлениях на основе функций.

...