https://github.com/aladser/letters-sending
Сервис управления рассылками. Django
https://github.com/aladser/letters-sending
django postgresql redis-cache
Last synced: about 1 month ago
JSON representation
Сервис управления рассылками. Django
- Host: GitHub
- URL: https://github.com/aladser/letters-sending
- Owner: Aladser
- Created: 2024-08-02T07:20:13.000Z (almost 2 years ago)
- Default Branch: master
- Last Pushed: 2024-10-17T08:20:34.000Z (over 1 year ago)
- Last Synced: 2025-04-05T22:43:23.109Z (about 1 year ago)
- Topics: django, postgresql, redis-cache
- Language: Python
- Homepage:
- Size: 1.65 MB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Сервис управления рассылками
Чтобы удержать текущих клиентов, часто используют вспомогательные, или «прогревающие», рассылки для информирования и привлечения клиентов.
Проект предлагает сервис управления рассылками, администрирования и получения статистики.
## Логика работы системы
+ После создания новой рассылки, если текущие дата и время больше даты и времени начала и меньше даты и времени окончания, должны быть выбраны из справочника все клиенты, которые указаны в настройках рассылки, и запущена отправка для всех этих клиентов.
+ Если создается рассылка с временем старта в будущем, отправка должна стартовать автоматически по наступлению этого времени без дополнительных действий со стороны пользователя сервиса.
+ По ходу отправки рассылки должна собираться статистика по каждой рассылке для последующего формирования отчетов. Попытка создается одна для одной рассылки.
+ Внешний сервис, который принимает отправляемые сообщения, может долго обрабатывать запрос, отвечать некорректными данными, на какое-то время вообще не принимать запросы. Нужна корректная обработка подобных ошибок. Проблемы с внешним сервисом не должны влиять на стабильность работы разрабатываемого сервиса рассылок.
## Настройки проекта
+ cоздать файл *.env* в корне проекта с настройками, аналогичными *.env.example*
+ заполнение БД
```
python manage.py migrate
python manage.py create_users && python manage.py seed
```
+ ``settings.SCHEDULER_ACTIVE = True`` - выставить для запуска встроенной периодической задачи
+ запуск одной копии проекта
```
python manage.py runserver --noreload
```
## Приложения
+ **authen** - Аутентификация
+ **letters_sending** - Почтовые рассылки
+ **blog** - Блоги
## Модели
* **authen**: ``User``, ``Country``,
* **letters_sending**: ``Message``, ``Client``, ``LettersSending``,
+ ``DatePeriod`` - Интервал отправки,
+ ``Status`` - Статус рассылки,
+ ``Attempt`` - Попытка рассылки
* **blog**: ``Blog``
## Контроллеры (CBV-стиль)
* **authen**
+ ``CustomLoginView`` - авторизация
+ ``CustomLogoutView`` - выход из системы
+ ``RegisterView`` - регистрация пользователя
+ ``ProfileView`` - профиль пользователя
+ ``verificate_email``(FBV) - подтвердить почту
+ ``CustomPasswordResetView`` - сброс пароля - отправка ссылки на почту
+ ``CustomUserPasswordResetConfirmView`` - сброс пароля - ввод нового пароля
+ ``UserListView`` - список пользователей
+ ``set_user_activation``(FBV) - устанавливает активность пользователя
* **letters_sending**
+ CRUD рассылок
* ``LettersSendingListView`` - список
* ``LettersSendingDetailView`` - детали
* ``LettersSendingCreateView`` - создание
* ``LettersSendingUpdateView`` - обновление
* ``LettersSendingDeleteView`` - удаление
* ``deactivate_letterssending``(FBV) - выключить активную рассылку
+ CRUD клиентов:
* ``ClientListView`` - список
* ``ClientCreateView`` - создание
* ``ClientUpdateView`` - обновление
* ``ClientDeleteView`` - удаление
+ CRUD сообщений
* ``MessageListView`` - список
* ``MessageDetailView`` - детали
* ``MessageUpdateView`` - обновление
* ``MessageDeleteView`` - удаление
+ ``AttemptListView`` - статистика рассылок
+ ``index_page``(FBV) - главная страница
* **blog**
+ ``BlogListView`` - список
+ ``BlogDetailView`` - детали
## Рассылка писем
+ ``letters_sending.services.send_letters.send_letters()`` - функция рассылки писем
+ ``letters_sending/management/commands/scheduler.py`` - запуск консольной периодической задачи рассылок
+ ``letters_sending.services.letsend_schedulrer.LettersSendingScheduler`` - встроенный планировщик рассылок
* ``letters_sending.LetterConfig.ready()`` - запуск планировщика
+ ``letters_sending.views.views.AttemptListView`` - статистика рассылок
Одновременно может быть запущен планировщик или консольная команда.
## Права
+ Все пользователи могут смотреть блоги. На главной странице ссылка на все блоги
+ ``OwnerVerificationMixin`` - миксин модификации GET и POST методов для проверки владельца объекта
+ ``OwnerListVerificationMixin`` - миксин модификации get_queryset() на просмотр списка всех или своих объектов
### Менеджер
+ ``view_client,view_message,view_letterssending,view_user`` - просмотр всех клиентов, сообщений, рассылок, пользователей
+ ``view_custom_client,view_message,view_custom_letterssending`` - просмотр своих клиентов, сообщений, рассылок
+ ``block_user`` - блокировать пользователей
+ ``deactivate_letterssending`` - отключать рассылки
### Пользователь
* ``view_*_perm`` - права на просмотр списка объектов
* ``view_owner_*_perm`` - доступ к ListView - контроллерам
+ просмотр своих клиентов, сообщений, рассылок, пользователей
+ добавление клиентов, сообщений, рассылок
+ обновление своих клиентов, сообщений, рассылок
+ удаление своих клиентов, сообщений, рассылок
При регистрации пользователь попадает в группу пользователей
### Блогер
+ добавление, обновление и удаление блогов
## Кэширование
Кэширование реализовано через собственные классы:
+ ``ManagedCache`` - кэширует страницы для каждого пользователя. При обновлении данных страницы кэши страницы всех пользователй сбрасываются
+ ``ManagedCachedMixin`` - миксин CBV-контроллеров для управления кэшем страниц. Заменяет get-,render_to_response-методы.
Добавлено кэширование:
+ главная страница
+ список рассылок, сообщений, клиентов, блогов
+ детальная страница рассылок, блогов
## Главная страница

## Профиль пользователя

## Рассылки

## Статистика рассылок

## Клиенты

## Сообщения

## Блоги
