Прежде всего, я знаю, что на этот вопрос уже был дан ответ здесь , который использует сторонний пакет django-celery-email , но я пытаюсь выяснить, как это сделать выполнять такую работу, не переходя ни на какую стороннюю библиотеку.
Поэтому мне нужно асинхронно отправлять электронную почту для сброса пароля с Celery .
Мой forms.py
файл выглядит так:
from django import forms
from accounts.tasks import send_mail
from django.contrib.auth.forms import PasswordResetForm as PasswordResetFormCore
class PasswordResetForm(PasswordResetFormCore):
email = forms.EmailField(max_length=254, widget=forms.TextInput(
attrs={
'class': 'form-control',
'id': 'email',
'placeholder': 'Email'
}
))
def send_mail(self, subject_template_name, email_template_name,
context, from_email, to_email, html_email_template_name=None):
"""
This method is inherating Django's core `send_mail` method from `PasswordResetForm` class
"""
super().send_mail(subject_template_name, email_template_name,
context, from_email, to_email, html_email_template_name)
Я пытаюсь отправить почту через Сельдерей из send_mail
метода PasswordResetForm
класса. Я имею в виду звонить super().send_mail(...)
с Сельдереем . У меня также есть функция send_mail
в моем файле Celery tasks.py
, где я пытаюсь передать метод super().send_mail
в качестве аргумента для его вызова оттуда.
Прямо сейчас мой tasks.py
файл выглядит примерно так:
from __future__ import absolute_import, unicode_literals
@shared_task
def send_mail():
pass
Я использую RabbitMQ
в качестве посредника сообщений наряду с Celery