Настройка django-сельдерея по электронной почте для местного разработчика - PullRequest
0 голосов
/ 10 октября 2019

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

Для этой версии требуются следующие версии: Python 2.7 и Python3.5, Django 1.11, 2.1 и 2.2 Celery 4.0

У меня есть толькоЯ использовал Python в течение нескольких месяцев и никогда не сталкивался с ситуацией, когда для проекта требуются две версии Python. И я использую официальную рекомендацию pipenv для местного развития. Быстрый Google показывает, что невозможно установить два интерпретатора Python в виртуальной среде. Поскольку плагин кажется таким популярным, я удивлялся, как другие его настраивают? Извиняюсь, если я пропустил что-то важное, что объясняет это.

Бонусный ответ также будет учитывать, что я использую docker, и образ docker установит пакеты python, как это.

RUN pipenv install --system --deploy --ignore-pipfile

Большое спасибо заранее.

Ответы [ 2 ]

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

В конце концов я не использовал электронную почту django-celery. Без этого пакета легко отправлять электронные письма, созданные приложением django-allauth.

Я использовал эти ресурсы -

https://github.com/anymail/django-anymail/issues/79

https://docs.djangoproject.com/en/2.2/topics/email/#defining-a-custom-email-backend

В основном вы делаете это, чтобы заставить его работать.

В файле settings.py определите CustomEmailBackend -

EMAIL_BACKEND = "users.backends.CustomEmailBackend"

В файле backend.py определите бэкэнд -

from django.core.mail.backends.base import BaseEmailBackend
from .tasks import async_send_messages

class CustomEmailBackend(BaseEmailBackend):
    def send_messages(self, email_messages):
        async_send_messages.delay(email_messages)
        return len(email_messages)

И это задача -

from django.core.mail import get_connection

from abstract_base_user.celery import app

@app.task(rety_backoff=True, serializer="pickle")
def async_send_messages(email_messages):
    conn = get_connection(backend='anymail.backends.mailgun.EmailBackend')
    conn.send_messages(email_messages)

Приложение celery django должно быть настроено стандартным способом, как определено в https://docs.celeryproject.org/en/latest/django/first-steps-with-django.html

И настройки сельдерея в settings.py должны включать тип содержимого pickle -

CELERY_ACCEPT_CONTENT = ['json', 'pickle']

Очевидно, что вам нужно включить ваши настройки в любое время и настройки брокера. Но этого должно быть достаточно, чтобы кто-нибудь начал.

0 голосов
/ 11 октября 2019

Я почти уверен, что это просто неточное описание в документах проекта , поэтому для установки вам потребуется либо python 2.7, либо python> = 3.5

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