Игнасио прав, указав, что некоторые из приложений, о которых вы упомянули, уже существуют.Вам также следует взглянуть на проекты типа Pinax для других подключаемых приложений, которые могут стать отправной точкой для вашего собственного проекта.
Теперь к вашему вопросу: проект Django - это коллекция приложений Django -та часть, которую вы получили правильно. Книга Django определяет это лучше:
"Проект - это набор настроек для экземпляра Django, включая конфигурацию базы данных, специфичные для Django опции и специфичные для приложения настройки."
Книга django определяет приложение Django как:
" Пакет кода Django, включая модели и представления, которые живут вместе водин пакет Python и представляет собой полное приложение Django. "
Но в недавнем уроке с Джейкобом Капланом-Моссом я понял (учтите, что я не говорю, что это то, чтоон сказал !!!) что приложение Django - это все, что связано с общим четко определенным поведением .Я также понял, что иметь много небольших приложений - это нормально - лучше, чем иметь одно монолитное приложение, которое делает все - и что некоторые приложения просто предоставляют шаблоны, некоторые просто модели, некоторыеполная коллекция шаблонов, моделей и представлений.
Большинство моих проектов, которые являются приложениями для нашей компании, ориентированными на внутреннюю сторону, имеют общее подключаемое приложение, разработанное внутри компании, которое представляет собой набор шаблонов, CSS, Javascript и т. д.;которые связывают проекты вместе с общим взглядом и ощущением.У меня нет представлений или моделей в этом подключаемом приложении.
У меня есть одно подключаемое приложение, также разработанное внутри компании, в котором размещена группа моделей, которые совместно используются несколькими проектами.Модели представляют собой общие таблицы базы данных, которые используются несколькими различными приложениями, и дублирование их в каждом из приложений может нарушить DRY .
Несколько хороших примеров приложений:
- аутентификация (в Django уже есть стандартное приложение для аутентификации)
- поддержка граватар (у Pinax есть)
- тегирование (доступно несколько опций, у Pinax есть один)
- helpdesk (мы разработали один из них)
Все вышеперечисленное решает одну логическую проблему.Они не пытаются быть универсальным решением ... Приложение Gravatar не обеспечивает поддержку OpenID (есть другое приложение для OpenID), а мое внутреннее приложение службы поддержки не обеспечивает аутентификацию (оно использует django по умолчанию)приложение для этого).
Плохой пример приложения Django - это приложение, в котором реализована аутентификация, поддержка openid, служба поддержки и отслеживание проекта.Почему это было бы плохо?Потому что теперь, если вы хотите повторно использовать свое приложение для аутентификации, вам нужно выбрать некоторые модели, некоторые представления, некоторые шаблоны из вашего всеобъемлющего приложения.Если вы решите, что поддержка OpenId является обязательной для вашего следующего проекта, вам придется пройтись по коду этого гиганта приложения и выяснить, какие части актуальны.
Хорошее приложение Django предоставляет один логический наборопераций и делает это хорошо.