Введение
Это третий блог из серии «Настройка проекта 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