Введение

Это третий блог из серии «Настройка проекта Django для производства». В этом блоге мы рассмотрим пакет «config» и «общее» приложение проекта «DjangoProduction»; вы можете клонировать этот проект из репозитория GitHub:



Если указанная выше кликабельная карточка не работает, воспользуйтесь ссылкой на репозиторий: https://github.com/PythonBitsYT/DjangoProduction.

Если вы хотите настроить новый готовый проект Django Production с нуля или хотите узнать больше о дизайне проекта «DjangoProduction», обратитесь к первой статье этой серии — [Настройка проекта Django для производства] (Часть — 1) Новый проект Настраивать:

https://medium.com/@rishabhojha11/c656f0aff6cd

Если вам интересно узнать о структуре пакета «settings» в деталях и о том, как переменные среды используются для принятия решения о том, какие конфигурации проекта использовать для выполнения, обратитесь ко второй статье в этой серии — [Настройка проекта Django для производства] ( Часть — 2) Пакет «настройки»:

https://medium.com/@rishabhojha11/549e7935bbd0

Пакет «Конфигурация»

config
├── __init__.py
├── asgi.py
├── settings
│   ├── __init__.py
│   ├── core_dev.py
│   ├── core_prod.py
│   ├── core_uat.py
│   ├── django.py
│   ├── env_vars.py
│   └── setup.py
├── settings_enums.py
├── static_storage_backends.py
├── storage_media_backends.py
├── urls.py
└── wsgi.py

Если вы знакомы со структурой приложения Django по умолчанию, которая создается с помощью команды «django-admin startproject», то вы можете легко определить сходство с пакетом конфигурации — и вы правы. Мы только что переместили содержимое приложения по умолчанию (в данном случае djangoprod) в другой пакет, созданный внутри него, с именем «config».

Основная цель этого изменения заключалась в том, чтобы предоставить еще один уровень абстракции, чтобы при необходимости мы могли поместить все приложения нашего проекта в пакет «djangoprod» и отправить его как устанавливаемый. (Игнорируйте эту часть, если она звучит запутанно)

«Общее» приложение

При создании большого приложения вы обнаружите, что повторяете одну и ту же логику кода в нескольких местах. Это чаще всего встречается с перечислениями, утилитами даты и времени, случайными утилитами, утилитами преобразования объектов.

Чтобы уменьшить дублирование кода, мы создали общее приложение в нашем проекте:

common
├── __init__.py
├── admin.py
├── apps.py
├── enums
│   ├── __init__.py
│   ├── env_enums.py
│   └── generic_enums.py
├── exceptions
│   ├── __init__.py
│   └── custom_api_exception.py
├── generic_serializers
│   ├── __init__.py
├── generic_view_mixins
│   ├── __init__.py
│   └── custom_api_view.py
├── migrations
│   ├── __init__.py
├── model_queries
│   ├── __init__.py
├── models
│   ├── __init__.py
├── scripts
│   ├── __init__.py
├── security
│   └── set_client_ip.py
└── utilities
    ├── __init__.py
    ├── struct_obj.py
    └── utils
        ├── __init__.py
        ├── date_util.py
        ├── generic_util.py
        ├── random_util.py
        └── validation_util.py

Давайте кратко рассмотрим каждый пакет в общем приложении:

пакет «перечисления»

  • Этот пакет используется для создания глобальных перечислений, которые будут использоваться несколькими приложениями.
  • Мы можем создать несколько файлов enum python в этом пакете для поддержки более широкого пространства имен.

пакет «исключения»

  • Этот пакет используется для создания глобальных исключений, которые будут использоваться в проекте различными приложениями.
  • «custom_api_exception.py» — образец исключения, который мы создали.

Пакет «универсальные_сериализаторы»

  • Очень часто встречаются требования проверки, когда нам нужно проверить один и тот же тип данных в нескольких приложениях.
  • В таких ситуациях вместо создания нескольких сериализаторов имеет смысл определить общие сериализаторы в глобальном контексте общего приложения.

Пакет «generic_view_mixins»

generic_view_mixins
├── __init__.py
└── custom_api_view.py
  • Подобно сериализаторам, мы можем поместить в этот пакет любую общую логику обработки представлений, создав классы примесей для абстрагирования функциональности.
  • Обратите внимание на модуль «customer_api_view.py» — он наследуется от APIView DRF и используется для абстрагирования логики сериализации данных запроса.

пакет «миграции»

  • Пакет Django по умолчанию

пакет "Модели"

  • Этот пакет содержит определение любой абстрактной модели, которая будет использоваться в проекте.
  • Это помогает уменьшить дублирование кода при создании модели.

Пакет «model_queries»

  • Этот пакет предназначен для абстрагирования всех операций, связанных с моделью, в одном месте.
  • Все модули этого пакета должны состоять из операций модели CURD с использованием ООП. Эти классы моделей следует импортировать и использовать вместо непосредственного выполнения действий над моделями.

пакет «скрипты»

  • Пакет для абстрагирования всех скриптов Python типа CRON.

пакет «безопасность»

  • Этот пакет состоит из всех модулей, которые будут использоваться для добавления дополнительной безопасности к API проекта.
  • Такие как — идентификация IP запрашивающего клиента, защита от DDoS-атак и т. д.

пакет «коммунальные услуги»

  • В пакете утилит мы абстрагируем все общие функции, классы, методы, которые будут использоваться несколькими приложениями.
utilities
├── __init__.py
├── struct_obj.py
└── utils
    ├── __init__.py
    ├── date_util.py
    ├── generic_util.py
    ├── random_util.py
    └── validation_util.py
  • «struct_obj.py» — очень полезная утилита, которую мы используем для преобразования словаря Python в объект.
  • Пакет «utils» в разделе «Утилиты» состоит из утилит, связанных с датой, проверкой и т. д., которые можно использовать в приложениях.

Все вышеперечисленные пакеты помогают нам максимизировать повторное использование кода, абстрагируя наиболее часто используемые функции в «общем» приложении. Это поведение может быть расширено еще больше в соответствии с требованиями вашего проекта.

Целью этой серии статей было дать вам платформу для начала вашего путешествия по настройке проекта django. Пожалуйста, не стесняйтесь обращаться ко мне на Medium или LinkedIn с любыми вопросами, помощью, предложениями или просто сказать «Привет». Спасибо за чтение.

Использованная литература:

[Настройка проекта Django для производства] (Часть — 1) Настройка нового проекта: https://medium.com/@rishabhojha11/c656f0aff6cd

[Настройка проекта Django для производства] (Часть — 2) Пакет Настройки: https://medium.com/@rishabhojha11/549e7935bbd0