Рубрики
Без рубрики

Понять Джанго: анатомия применения

В предыдущей статье Django мы глубоко попали на сайт администраторов Django. Мы видели, что … с меткой Python, Django, приложениями.

В предыдущем Понять Джанго Статья, мы глубоко вошли на сайт администраторов Django. Мы увидели, что такое сайт и как его настроить и настроить. В этой статье мы рассмотрим, что входит в приложение. Приложения являются основными элементами проекта Django.

Что такое приложение?

Прежде чем добраться до того, что приложение Django это , нам, вероятно, нужно начать с того, что оно не Потому что терминология сбивает с толку. В мире веб -разработки разработчики могут назвать веб -сайт «веб -приложением».

На языке Джанго «веб -приложение» – это django Проект Анкет Все произведения, которые объединяются, чтобы создать веб -сайт, являются проектом. Основные компоненты в рамках проекта называются Приложения Анкет Другими словами, проект Django построен из одного или нескольких приложений Django.

Эта ситуация очень похожа на пакеты Python. Индустрия программного обеспечения часто описывает программное устройство как «пакет». Мы думаем о пип , npm , или Apt как «пакет» менеджеры. Это приводит к аналогичной проблеме именования, потому что Python также вызывает любой каталог с __init__.py Также поставьте «пакет».

В действительности, код, который вы загружаете с помощью PIP, технически называется « Distribution ». ». Несмотря на то, что мы в разговорной речи говорим о загрузке Python из PYPI в виде пакетов, мы действительно говорим о распределениях, а дистрибутив – это устройство, которое содержит один или несколько пакетов Python.

Надеемся, что теперь вы понимаете отношения приложений в Джанго.

Ваше «веб -приложение» – это django Проект состоит из еще одного Django Приложения Анкет

Структура приложения

Давайте посмотрим на полностью загруженное приложение Django, чтобы увидеть довольно стандартную структуру, с которой вы столкнетесь в проектах Django.

Приложение обычно пытается захватить основную концепцию в вашей системе. Для этой статьи мы будем использовать фильмы в качестве концепции, которую мы хотим моделировать.

Давайте посмотрим, что включает в себя каркас по умолчанию, затем создадим его со всеми дополнительными.

(venv) $ ./manage.py startapp movies
(venv) $ tree movies
movies
├── __init__.py
├── admin.py
├── apps.py
├── migrations
│   └── __init__.py
├── models.py
├── tests.py
└── views.py

admin.py : Этот файл, где все ваше ModelAdmin Занятия живут, чтобы питание, как приложение фильмов будет появляться в администраторе Django. Вы можете узнать больше о администраторе/Понимание-Джанго/Администратор-все-коричневые/

apps.py : Этот файл для AppConfig приложения. Мы обсудим AppConfig и как использовать его позже в этой статье.

миграции : Этот каталог – это место, где все миграции базы данных хранятся для приложения. Любые изменения модели для этого приложения будут генерировать миграцию и создают пронумерованный файл миграции в этом каталоге. Более подробная информация о миграциях:/Понимание-Джанго/Магазин-Дата-с моделями/

модели.py : Этот файл является домом для всех django Модель классы в приложении. Модели представляют все данные вашей базы данных. Узнайте больше о моделях/Понимание-Джанго/Магазин-Дэта-с моделями/

tests.py : Этот файл предназначен для автоматических тестов. Мы рассмотрим автоматические тесты в Джанго в будущей статье. Пока вы можете знать, что Я всегда Удалить Этот файл и замените его Тесты упаковка. A Тесты Пакет превосходит, потому что вы можете разделить на более целенаправленные файлы, такие как test_models.py Чтобы знать, где находятся соответствующие тесты.

views.py : Этот файл – это то, куда идут функции View или классы Django. Просмотры – это клейкий код, который соединяет ваши маршруты URL с моделями базы данных. Я писал о взглядах/понимание-джанго/просмотры на просмотре/

Это все, что поставляется с сгенерированным приложением, но какие еще отсутствуют файлы, которые вы обычно увидите в приложении Django?

urls.py : Этот файл часто используется для создания маршрутов, которые логически группируют все функциональность, связанные с фильмами. urls.py Файл будет включать все маршруты в чем -то вроде www.mysite.com/movies/ . Информация по URL-адресам:/Понимание-Джанго/URLS Lead-Way/

forms.py : Когда вы используете django Форма Классы для взаимодействия с пользователями, это файл, в котором хранятся формы. Вы можете узнать больше о Forms/Inpect-Django/User-Interaction-Forms/

TemplateTags : Этот каталог является пакетом Python, который будет включать в себя такой модуль, как Movie_tags.py где вы определите любые пользовательские теги шаблонов для использования при рендеринге ваших шаблонов. Пользовательские теги-это тема/Понимание-Джанго/Шаблоны-Услуги Interfaces/

Шаблоны : Этот каталог может хранить шаблоны, которые приложение будет отображать. Я лично предпочитаю использовать по всему проекту Шаблоны Справочник, как обсуждалось/Понимание-Джанго/Шаблоны-ИСПОЛЬЗОВАНИЕ-Interfaces/Но Шаблоны Условные каталоги обычно встречаются, особенно для сторонних приложений, которые вы можете втянуть в свой проект.

Статический : Для статических файлов, которые вы хотите отобразить, как изображения, вы можете использовать Статический каталог. Мы обсудим статические файлы больше в будущей статье.

Управление : Пользователи могут расширить Django на пользовательские команды, которые можно назвать через Manage.py . Эти команды хранятся в этом пакете. Пользовательские команды – будущая тема в этой серии.

Локаль : При выполнении переводов и интернационализации файлы перевода должны иметь дом. Это цель Локаль каталог. Мы узнаем больше о интернационализации (I18N) и локализации (L10N) в будущей статье.

Managers.py : Этот файл не всегда используется, но если в вашем приложении много пользовательских менеджеров, вы можете отделить их от ваших моделей в этом файле. Менеджеры-это тема/Понимание-Джанго/Магазин-Дэта-с моделями/

Большинство приложений будут не Иметь все эти произведения, но это должно дать вам представление о том, что такое вещи, когда вы изучаете приложения Django в дикой природе самостоятельно. Вот как будет выглядеть наше окончательное дерево.

(venv) $ tree movies
movies
├── __init__.py
├── admin.py
├── apps.py
├── forms.py
├── locale
│   └── es
│       └── LC_MESSAGES
│           ├── django.mo
│           └── django.po
├── management
│   ├── __init__.py
│   └── commands
│       ├── __init__.py
│       └── do_movie_stuff.py
├── managers.py
├── migrations
│   ├── 0001_initial.py
│   └── __init__.py
├── models.py
├── static
│   └── movies
│       └── moviereel.png
├── templates
│   └── movies
│       ├── index.html
│       └── movie_detail.html
├── templatestags
│   ├── __init__.py
│   └── movies_tags.py
├── tests
│   ├── __init__.py
│   ├── test_models.py
│   └── test_views.py
├── urls.py
└── views.py

Загрузка приложений

Теперь мы видели, что находится в приложении Django, и имеем представление о композиции приложения. Как Django загружает приложения?

Джанго делает не Сделайте автоматическое обнаружение приложений Django в вашем проекте. Если вы хотите, чтобы Django включил в свой проект приложение, вы должен Добавьте приложение к своему Insted_apps Список в файле настроек.

Это хороший пример того, как Джанго следит за духом Python, предпочитая явное из -за неявных. Будучи явным, ваш проект не опасен включить приложения, которых вы не ожидаете. Это может показаться глупым для приложений, которые вы пишете сами, но вы будете благодарны, что это тот случай, когда какой -либо сторонний пакет в вашей виртуальной среде имеет приложение Django, которое вы не хотите в своем проекте.

При запуске, когда приложение в Insted_apps , Джанго будет искать AppConfig учебный класс. Этот класс хранится в apps.py из StartApp командование и содержит метаданные о приложении.

Когда Django запустится, он инициализирует систему, выполнив следующее:

  • Загрузите настройки
  • Настройка ведения журнала (тема, которую мы рассмотрим в будущем)
  • Инициализировать реестр приложений
  • Импортировать каждый пакет из Insted_apps
  • Импортировать модельный модуль для каждого приложения
  • Вызвать Готово Метод каждого AppConfig обнаруженный

Готово Метод является полезным для принятия мер при запуске. Поскольку модели уже загружаются к тому времени, когда называется метод, это безопасное место для взаимодействия с Джанго.

Если вы попытаетесь запустить код настройки до того, как Django будет готов, и вы попытаетесь сделать что -то вроде использования ORM для взаимодействия с данными базы данных, вы, вероятно, получите AppRegistryNotReady исключение. Большинству приложений не нужно напрямую запускать код запуска, но зная о Готово Крюк – это полезный фрагмент знаний, чтобы держать в заднем кармане.

Экосистемные приложения

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

Главная причина использовать Django заключается в том, что фреймворк использует подход «батареи, включенные». Большинство инструментов, которые вам необходимы для создания веб -сайта, выпекаются непосредственно в рамках. Это совершенно другой подход по сравнению с Колба который обеспечивает относительно небольшой API и в значительной степени зависит от сторонних библиотек.

Несмотря на то, что Джанго включает в себя большинство основных предметов для веб -приложения, фреймворк не включает все . Если вы хотите включить больше функций, приложения Django заполняют пробелы.

Прежде чем вы выходите в PYPI, нам не нужно смотреть дальше, чем django.contrib упаковка. Когда вы запускаете StartProject командование , Django будет включать в себя различные встроенные приложения, которые выполняют различные функции. Если вам не нужна функциональность, вы можете отказаться от удаления приложения из вашего списка в Insted_apps Анкет

Я думаю, что это большая разница в философии за рамки. Некоторым разработчикам нравится начинать с чрезвычайно минимального ядра функциональности и создавать его в зависимости от их потребностей. Философия Джанго, кажется, заключается в том, что вы начинаете с самоуверенного базового уровня и подавляете то, что вам не требует.

С моей точки зрения, я думаю, что философия Джанго является правильной (шокирующая, не так ли!? 🤪). Преимущество философии Джанго заключается в том, что вы используете знания людей, которые очень долго создавали веб -приложения. Вы не только используете эти знания, но вы получаете выгоду от полировки, применяемой разработчиками Django для интеграции различных основных систем в постоянное целое. То, с чем у вас остается структура, которая ощущается так, как будто она принадлежит вместе, и я думаю, что это положительное влияние на вашу производительность.

Когда вы строите с минимального ядра и работаете, вы зависите от знания всего, что требуется для того, чтобы поставить что -то в Интернет. Это означает, что вы знаете все кусочки и как скрепить их вместе. Но большинство людей Не Знайте все части (потому что их так много!).

Если вы начнете минимально и не знаете произведения, вы узнаете по пути, но что произойдет, когда вы столкнетесь с новой концепцией, которая не вписывается в вашу оригинальную ментальную модель? Например, безопасность является важной частью, которая может разрушить вашу ментальную модель, когда вы узнаете о классе уязвимостей, который может ограничить то, что возможно сделать безопасно. Когда вы следите за этим подходом здания с нуля, я думаю, что конечным результатом, естественно, будет ваша собственная индивидуальная структура. Если это твоя вещь, потрясающе. Действуй. Для меня мне нужна рамка, которая является товаром и обычно поняла многими людьми.

Итак, какое это имеет отношение к приложениям Django? Приложения содержатся и многоразовые модули. Поскольку у них довольно стандартная структура, проект может быстро интегрировать новое приложение. Это означает, что вы можете использовать знания и опыт (читай: боевые шрамы) других веб -разработчиков. Все приложения играют по тем же правилам, поэтому вы, как разработчик, тратите меньше времени на приложение приложения к своему проекту, и больше времени получают выгоду от того, что оно делает.

Я думаю, что эта стандартная структура также облегчает экспериментирование с новыми приложениями. Когда мне понадобятся новые функции, я часто проверяю Django Packages искать приложения, которые могут удовлетворить мои потребности. По моему опыту, добавление нового приложения, во многих случаях, чуть больше, чем установка пакета, добавляя приложение в Insted_apps Список и размещение Включить в моем urls.py файл. Некоторые пакеты требуют большей конфигурации, чем это, но я думаю, что стоимость интеграции достаточно низкая, чтобы я мог бы быстро экспериментировать и отступить от моего решения, если я обнаружил, что приложение не сделает то, что мне нужно.

В целом, приложения Django делают работу с экосистемой Django более приятным опытом.

Резюме

В этой статье мы изучали приложения Django.

Мы видели:

  • Что такое приложение Django
  • Как структурировано приложение Django
  • Как экосистема Django получает выгоду от общего формата, который создает многократные компоненты

В следующий раз мы рассмотрим аутентификацию в Джанго. Мы будем изучать:

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

Если вы хотите следить за сериалом, пожалуйста, не стесняйтесь подписаться на мою новостную рассылку, где я объявляю весь свой новый контент. Если у вас есть другие вопросы, вы можете связаться со мной в Интернете в Твиттере, где я нахожусь @mblayman Анкет

Эта статья впервые появилась на mattlayman.com Анкет

Оригинал: “https://dev.to/mblayman/understand-django-anatomy-of-an-application-4p1”