Модуль Core
Назначение
codex_django.core это общий инфраструктурный слой, на который опираются Django-проекты, собранные через codex-django или использующие его как библиотеку.
Это не бизнес-модуль и не одна предметная область. Здесь собраны сквозные строительные блоки, которые одновременно нужны многим частям проекта:
- переиспользуемые model mixins
- доступ к SEO-данным из шаблонов
- discovery для i18n и вспомогательные URL-хелперы
- базовая логика sitemap
- Redis-кэш для инфраструктурных данных
- небольшие framework-level интеграции для шаблонов и management commands
Из-за этого core выступает как фундамент проекта: сначала он дает общие Django-примитивы, а уже поверх них строятся feature-модули.
Что Находится Внутри
Model Mixins
В core.mixins.models лежат абстрактные Django mixin-классы:
TimestampMixinActiveMixinSeoMixinOrderableMixinSoftDeleteMixinUUIDMixinSlugMixin
Они стандартизируют повторяющиеся поля и поведение моделей, чтобы в проектах не приходилось заново собирать базовые сущности вручную.
SEO Интеграция
SEO-путь здесь построен вокруг двух частей:
core.seo.selectors.get_static_page_seo()core.context_processors.seo_settings()
Селектор берет модель из настройки CODEX_STATIC_PAGE_SEO_MODEL, читает данные, кэширует их через SEO Redis manager и отдает плоский словарь, удобный для шаблонов.
Context processor определяет текущий url_name и пробрасывает результат в шаблон как seo.
То есть core не владеет самим SEO-контентом, а предоставляет стандартный путь доступа и кэширования, в который подключаются другие модели проекта.
Redis Инфраструктура
В core.redis.managers находятся базовый адаптер Redis и несколько специализированных менеджеров:
BaseDjangoRedisManagerстроит ключи с project prefix и читаетREDIS_URLSeoRedisManagerкэширует SEO-данные статических страницDjangoSiteSettingsManagerкэширует настройки сайта и отдает template-friendly proxyBookingCacheManagerкэширует занятые интервалы записи по мастеру и датеNotificationsCacheManagerкэширует данные, связанные с уведомлениями
Во всем модуле используется единый паттерн: async-first методы плюс sync-обертки для обычного Django-кода. Это дает верхним слоям единый способ работать с Redis без повторной настройки клиента и схемы ключей.
Internationalization Helpers
core.i18n.discovery.discover_locale_paths() ищет locale-директории сразу в нескольких схемах проекта:
- централизованный
locale/<domain>/... - локальный
locale/у верхнеуровневого приложения - локальный
features/<name>/locale/
core.templatetags.codex_i18n.translate_url дополняет это template tag'ом для переключения языка по текущему URL.
Вместе эти части поддерживают модульную стратегию переводов, на которую рассчитаны Codex-проекты.
Sitemap Base
core.sitemaps.BaseSitemap это переиспользуемый базовый класс для sitemap, в котором уже зафиксированы общие правила:
- i18n включен по умолчанию
- canonical domain берется из settings
- для ссылок принудительно используется HTTPS
- формируются alternate language links и
x-default - есть fallback-поиск именованных URL через namespaces
Это убирает повторяющийся sitemap-boilerplate из прикладных приложений.
Management Support
core.management.commands.codex_makemessages добавляет модульный workflow поверх стандартного Django makemessages.
Вместо одного общего прохода по проекту команда определяет отдельные домены по шаблонам, приложениям и feature-папкам, после чего запускает извлечение переводов отдельно для каждого домена.
Это соответствует архитектуре, где переводы организованы по поддоменам проекта, а не как один глобальный каталог сообщений.
Внутренняя Архитектура
flowchart TD
A["Feature или system models"] --> B["core mixins"]
A --> C["core SEO selector"]
C --> D["SEO Redis manager"]
E["Templates"] --> F["seo_settings context processor"]
F --> C
E --> G["translate_url template tag"]
H["Project settings"] --> C
H --> D
H --> I["BaseSitemap"]
H --> J["discover_locale_paths"]
K["Management command codex_makemessages"] --> J
Роль В Репозитории
core это базовый слой для framework-level переиспользования.
Если другие пакеты описывают прикладные возможности вроде booking или notifications, то core описывает общие механики, которые делают эти возможности удобными внутри Django-проекта.
Поэтому внутри core собраны темы, которые на первый взгляд выглядят разнородно:
их объединяет не предметная область, а то, что они относятся ко всему проекту сразу.
См. Также
systemдля проектных настроек, фикстур и более широких infrastructure mixinsbookingдля booking-специфичных mixins и adapters поверх общего слояnotificationsдля orchestration-слоя уведомлений