Отправка асинхронной почты в Django - без записи в базу данных? - PullRequest
0 голосов
/ 06 февраля 2020

Я хочу ускорить загрузку моего сайта, отправляя мою почту асинхронно. В настоящее время мой код выглядит примерно так:

def myFunction(content):
   result = modify(content)
   send_mail('My Subject', result, 'me@example.com')
   return render(request, 'page.html', result)

Используя Django -Mailer , я понял, что могу сократить время загрузки, вместо этого записав письмо в базу данных немедленно отправить его, а затем заставить cron + Django mailer работать по электронной почте в моей базе данных асинхронно.

Однако я хотел бы, чтобы моя база данных была максимально свободна от потенциально конфиденциальной информации, и хотел бы избежать запись любых писем, отправленных через мое приложение, в мою базу данных. Даже если данные просто пишутся в течение короткого времени, при автоматическом c резервном копировании существует вероятность, что что-то может быть сохранено.

Я понимаю, что здесь нет решения, но есть ли способ отправлять электронные письма асинхронно без каждая запись их в базу данных? Я действительно не думаю, что это возможно, но моя идеальная надежда была бы, если бы был способ вернуть ответ, а затем отправить электронное письмо.

def myFunction(content):
   result = modify(content)
   return render(request, 'page.html', result)
   send_mail('My Subject', result, 'me@example.com')

Django -After-Response , кажется, делает это, но не обновляется с 2015 года.

Этот ответ и этот ответ также предоставляют потенциальные решения.

1 Ответ

0 голосов
/ 06 февраля 2020

У вас есть несколько вариантов здесь. Одним из способов было бы иметь очередь задач и работника, выполняющего эти задачи.

Мне нравится использовать Django -RQ https://github.com/rq/django-rq, но Celery - еще один хороший вариант. Хотя при этом вам потребуется запустить рабочий экземпляр, а также что-то для хранения очереди, например Redis.

Для более простого и быстрого решения я рекомендую попробовать django -background-tasks: https://django-background-tasks.readthedocs.io/en/latest/# Этот хранит очередь задач в базе данных, но об этом позаботится, чтобы вам не пришлось реализовывать ее самостоятельно.

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