14. Оповещения
6 января 2017 г. 15:05
Всякий раз когда статус в модели Order
изменяется, встроенная машина конечных состояний выдаёт сигнал, используя Django сигналы. Эти сигналы принимаются django-SHOP оповещениями.
14.1. Оповещения в админке
В Django админ-бекенде, находящимся в Start > Shop > Notification, покупатель может сконфигурировать, какой email кому отправлять в зависимости от происходящих событий. При добавлении или редактировании оповещения, мы получаем маску формы с четырьмя полями ввода:
14.1.1. Идентификатор оповещения
Произвольное имя, используемое для различия оповещений. К примеру, продавец может назвать оповещение как "Заказ подтверждён, оплачено через PayPal".
14.1.2. Тип события
Каждый процесс заказа объявляет набор целей. Например, класс PayInAdvanceWorkflowMixin объявляет следующие цели: “Ожидается оплата”, “Внесена предоплата” и “Оплата не требуется”.
Продавец может настроить оповещения для каждой цели. Здесь он должен выбрать один из подготовленной коллекции.
14.1.3. Получатель
Переходы события передаются всякий раз, когда изменяется статус в заказе. Каждый заказ принадлежит одному покупателю, и обычно он первый информируется, когда какие-то изменения произошли.
Но другие лица в контексте данного интернет-магазина также заинтересованы в получении оповещений. В django-SHOP все сотрудники имеют право получать оповещения, которые принадлежат некоторой группе, имеющих право управлять сайтом.
14.1.4. Email Шаблоны
В разделе Start > Post Office > Email Templates можно выбрать шаблоны для Emails.
14.1.5. Вложения к оповещениям
Вы можете прикрепить один или несколько статических файлов, которые будут прикреплены к письму. Обычно, это pdf файл с условиями обслуживания. Так как сотрудники интернет-магазина не заинтересованы в получении таких вложений, то эти вложения получают только покупатели.
14.2. Post Office
Email-сообщения для подтверждения заказа отправляются django-SHOP ассинхронно. Причина в том, что иногда соединение сервера приложений с SMTP занимает несколько секунд, а затем только отправляет Email. Осуществлять отправку сообщения сихронным способом недопустимо во время самых важных фаз покупок.
Поэтому django-SHOP отправляет все сгенерированные письма, используя систему очередей в Post Office. Это приложение может хранить набор различных email шаблонов, которые используют такой же синтаксис шаблонного движка Django. Email-письма могут быть отрендерены как простой текст и/или HTML.
Когда электронные письма в очереди, объект выбранного шаблона содержит сериализованный контекст как JSON. Эти очереди сообщений электронной почты доступны в административной части Start > Post Office > Emails. Их статус может быть либо "в очереди", "отправлено" или "не удалось".
Команда send_queued_mail рендерит и отправляет письма данным получателям. Во время этого шага, данный шаблон рендерится применяя сохранённый контекст. Их статус затем изменяется на "отправлено" или в случае какой-то проблемы "не удалось".
Если django-SHOP настроен для работы в многоязычной среде, post office рендерит письмо на языке, используемом в процессе создания заказа.
14.2.1. Шаблоны для писем
Поля сообщения могут содержать любой код, который является валидным для Django шаблонов. Часто, письма содержат информацию о том, какие товары заказаны. Этот список часто является общим для всех email шаблонов, поэтому рекомендуется подготовить эти данные в базовом шаблоне. В приложении создайте эти базовые шаблоны внутри папки templates/myshop/email/.... Затем просто расширьте шаблон с помощью хорошо известного шаблонного тега:
{% extends "myshop/email/somebase.html" %}
14.2.1.1. Предостережения при использовании HTML сообщений
Отображение HTML в почтовых клиентах - это боль. Никто реально не может сказать, какие HTML теги разрешены в каком клиенте - а также есть другие программы для чтения электронных писем, которых намного больше, чем браузеров.
Поэтому верстать HTML шаблоны для писем нужно очень и очень консервативно. Это может показаться анахронизмом, но до сих пор наилучшей практикой является использование элемента <table>, и, при необходимости, помещать его в их <TD> (данные таблицы) элементы. Кроме того, нужно использовать встроенные стили, а не элемент <style>, содержащий блоки CSS. Рекомендуется использовать специальную структуру электронной почты, чтобы избежать неприятных причуд при рендере шаблонов.
Изображения могут быть встроены в HTML письма двумя разными способами. Первый это хранить изображения на сервере и прописывывать URI, ссылающихся на них. Поэтому django-SHOP добавляет URI в объект RenderContext для этого веб-сайта и сохраняет его в качестве переменной контекста с именем ABSOLUTE_BASE_URI. По соображениям безопасности, большинство почтовых клиентов не загружают внешние изображения, размещенные по умолчанию. Сам клиент должен осуществить запрос на загрузку их из внешних источников.
Другой способ добавить изображения в HTML письма - размещения их в inline теги. Другими словами, вместо URI ссылки использовать встраиваемые в виде строки в кодировке base64. Easy-thumbnails для этого предлагает шаблонный фильтр data_uri для выполнения этой операции. Это, конечно, значительно увеличивает размер письма, поэтому данный способ подходит для небольших изображений.
Представляю вашему вниманию книгу, написанную моим близким другом Максимом Макуриным: Секреты эффективного управления ассортиментом.
Книга предназначается для широкого круга читателей и, по мнению автора, будет полезна специалистам отдела закупок и логистики, категорийным и финансовым менеджерам, менеджерам по продажам, аналитикам, руководителям и директорам, в компетенции которых принятие решений по управлению ассортиментом.
Комментарии: 0