{"id":16098803,"url":"https://github.com/aladser/letters-sending","last_synced_at":"2026-05-05T23:32:30.437Z","repository":{"id":251560811,"uuid":"837085402","full_name":"Aladser/letters-sending","owner":"Aladser","description":"Сервис управления рассылками. Django","archived":false,"fork":false,"pushed_at":"2024-10-17T08:20:34.000Z","size":1727,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-05T22:43:23.109Z","etag":null,"topics":["django","postgresql","redis-cache"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Aladser.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-02T07:20:13.000Z","updated_at":"2024-10-24T02:09:04.000Z","dependencies_parsed_at":"2024-08-16T07:25:34.836Z","dependency_job_id":"25b84dc8-3cd5-4052-91a3-480d0873292d","html_url":"https://github.com/Aladser/letters-sending","commit_stats":null,"previous_names":["aladser/letters_sending","aladser/letters-sending"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aladser%2Fletters-sending","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aladser%2Fletters-sending/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aladser%2Fletters-sending/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aladser%2Fletters-sending/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Aladser","download_url":"https://codeload.github.com/Aladser/letters-sending/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247411193,"owners_count":20934650,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["django","postgresql","redis-cache"],"created_at":"2024-10-09T18:24:44.622Z","updated_at":"2026-05-05T23:32:30.430Z","avatar_url":"https://github.com/Aladser.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"#  Сервис управления рассылками\n\nЧтобы удержать текущих клиентов, часто используют вспомогательные, или «прогревающие», рассылки для информирования и привлечения клиентов.\nПроект предлагает сервис управления рассылками, администрирования и получения статистики.\n\n##  Логика работы системы\n+ После создания новой рассылки, если текущие дата и время больше даты и времени начала и меньше даты и времени окончания, должны быть выбраны из справочника все клиенты, которые указаны в настройках рассылки, и запущена отправка для всех этих клиентов.\n+ Если создается рассылка с временем старта в будущем, отправка должна стартовать автоматически по наступлению этого времени без дополнительных действий со стороны пользователя сервиса.\n+ По ходу отправки рассылки должна собираться статистика по каждой рассылке для последующего формирования отчетов. Попытка создается одна для одной рассылки.\n+ Внешний сервис, который принимает отправляемые сообщения, может долго обрабатывать запрос, отвечать некорректными данными, на какое-то время вообще не принимать запросы. Нужна корректная обработка подобных ошибок. Проблемы с внешним сервисом не должны влиять на стабильность работы разрабатываемого сервиса рассылок.\n\n## Настройки проекта\n+ cоздать файл *.env* в корне проекта с настройками, аналогичными *.env.example*\n+ заполнение БД\n  ```\n  python manage.py migrate\n  python manage.py create_users \u0026\u0026 python manage.py seed\n  ```\n+ ``settings.SCHEDULER_ACTIVE = True`` - выставить для запуска встроенной периодической задачи\n+ запуск одной копии проекта\n  ```\n  python manage.py runserver --noreload\n  ```\n\n## Приложения\n+ **authen** - Аутентификация\n+ **letters_sending** - Почтовые рассылки\n+ **blog** - Блоги\n\n## Модели\n* **authen**: ``User``, ``Country``, \n* **letters_sending**: ``Message``, ``Client``, ``LettersSending``,\n  + ``DatePeriod`` - Интервал отправки,\n  + ``Status`` - Статус рассылки,\n  + ``Attempt`` - Попытка рассылки\n* **blog**: ``Blog``\n  \n## Контроллеры (CBV-стиль) \n* **authen**\n  + ``CustomLoginView`` - авторизация\n  + ``CustomLogoutView`` - выход из системы\n  + ``RegisterView`` - регистрация пользователя\n  + ``ProfileView`` - профиль пользователя\n  + ``verificate_email``(FBV) - подтвердить почту\n  + ``CustomPasswordResetView`` - сброс пароля - отправка ссылки на почту\n  + ``CustomUserPasswordResetConfirmView`` - сброс пароля - ввод нового пароля\n  + ``UserListView`` - список пользователей\n  + ``set_user_activation``(FBV) - устанавливает активность пользователя\n* **letters_sending**\n  + CRUD рассылок\n    * ``LettersSendingListView`` - список\n    * ``LettersSendingDetailView`` - детали\n    * ``LettersSendingCreateView`` - создание\n    * ``LettersSendingUpdateView`` - обновление\n    * ``LettersSendingDeleteView`` - удаление\n    * ``deactivate_letterssending``(FBV) - выключить активную рассылку\n  + CRUD клиентов:\n    * ``ClientListView`` - список\n    * ``ClientCreateView`` - создание\n    * ``ClientUpdateView`` - обновление\n    * ``ClientDeleteView`` - удаление\n  + CRUD сообщений\n    * ``MessageListView`` - список\n    * ``MessageDetailView`` - детали\n    * ``MessageUpdateView`` - обновление\n    * ``MessageDeleteView`` - удаление\n  + ``AttemptListView`` - статистика рассылок\n  + ``index_page``(FBV) - главная страница \n* **blog**\n  + ``BlogListView`` - список\n  + ``BlogDetailView`` - детали\n\n## Рассылка писем\n\n+ ``letters_sending.services.send_letters.send_letters()`` - функция рассылки писем\n+ ``letters_sending/management/commands/scheduler.py`` - запуск консольной периодической задачи рассылок\n+ ``letters_sending.services.letsend_schedulrer.LettersSendingScheduler`` - встроенный планировщик рассылок\n  *  ``letters_sending.LetterConfig.ready()`` - запуск планировщика\n+ ``letters_sending.views.views.AttemptListView`` - статистика рассылок\n\nОдновременно может быть запущен планировщик или консольная команда. \n\n\n## Права \n\n+ Все пользователи могут смотреть блоги. На главной странице ссылка на все блоги\n+ ``OwnerVerificationMixin`` - миксин модификации GET и POST методов для проверки владельца объекта\n+ ``OwnerListVerificationMixin`` - миксин модификации get_queryset() на просмотр списка всех или своих объектов\n\n###  Менеджер\n+ ``view_client,view_message,view_letterssending,view_user`` - просмотр всех клиентов, сообщений, рассылок, пользователей\n+ ``view_custom_client,view_message,view_custom_letterssending`` - просмотр своих клиентов, сообщений, рассылок\n+ ``block_user`` - блокировать пользователей\n+ ``deactivate_letterssending`` - отключать рассылки\n\n### Пользователь\n* ``view_*_perm`` - права на просмотр списка объектов\n* ``view_owner_*_perm`` - доступ к ListView - контроллерам\n\n+ просмотр своих клиентов, сообщений, рассылок, пользователей\n+ добавление клиентов, сообщений, рассылок\n+ обновление своих клиентов, сообщений, рассылок\n+ удаление своих клиентов, сообщений, рассылок\n\nПри регистрации пользователь попадает в группу пользователей\n\n### Блогер\n+ добавление, обновление и удаление блогов\n\n## Кэширование\n\nКэширование реализовано через собственные классы:\n+ ``ManagedCache`` - кэширует страницы для каждого пользователя. При обновлении данных страницы кэши страницы всех пользователй сбрасываются\n+ ``ManagedCachedMixin`` - миксин CBV-контроллеров для управления кэшем страниц. Заменяет get-,render_to_response-методы.\n\nДобавлено кэширование:\n+ главная страница\n+ список рассылок, сообщений, клиентов, блогов\n+ детальная страница рассылок, блогов\n\n## Главная страница\n![main](/readme/main.png)\n\n## Профиль пользователя\n![profile](/readme/user_profile.png)\n\n## Рассылки \n![sendings](/readme/sendings.png)\n\n## Статистика рассылок\n![stat](/readme/stat.png)\n\n## Клиенты\n![clients](/readme/clients.png)\n\n## Сообщения\n![messages](/readme/messages.png)\n\n## Блоги\n![blogs](/readme/blogs.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faladser%2Fletters-sending","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faladser%2Fletters-sending","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faladser%2Fletters-sending/lists"}