Я искал это в Google, но у меня все еще возникают проблемы с тем, что Django определяет как «приложения».
Следует ли мне создавать новое приложение для каждой функциональности сайта, даже если оно использует модели из основного проекта?
У вас, ребята, есть хорошее практическое правило, когда нужно отделить новое приложение, а когда сохранить функциональность вместе с «основным проектом» или другими приложениями?






Я стараюсь создавать новые приложения для каждого логически отдельного набора моделей. например.:
Я предпочитаю думать о приложениях Django как о повторно используемых модулях или компонентах, чем о «приложениях».
Это помогает мне инкапсулировать и отделять определенные функции друг от друга, улучшая возможность повторного использования, если я решу поделиться тем или иным «приложением» с сообществом в целом, а также удобство сопровождения.
Мой общий подход состоит в том, чтобы объединить определенные функции или наборы функций в «приложения», как если бы я собирался выпустить их публично. Сложнее всего выяснить, насколько велико каждое ведро.
Хороший трюк, который я использую, - это представить, как мои приложения будут использоваться, если они будут выпущены публично. Это часто побуждает меня сокращать ведра и более четко определять его «назначение».
У Джеймса Беннета есть замечательный набор слайдов о том, как организовать многоразовые приложения в Django.
«Приложение» может состоять из множества разных вещей, все зависит от вкуса. Например, предположим, вы создаете блог. Ваше приложение может представлять собой весь блог, или у вас может быть приложение «администратор», приложение «сайт» для всех общедоступных представлений, приложение «rss», приложение «службы», чтобы разработчики могли взаимодействовать с блогом в своих собственные пути и т. д.
Лично я бы сделал сам блог приложением и выделил бы его функциональность. Тогда блог можно было бы довольно легко повторно использовать на других веб-сайтах.
Преимущество Django в том, что он распознает любой файл models.py на любом уровне вашего дерева каталогов как файл, содержащий модели Django. Таким образом, разбиение вашей функциональности на более мелкие «подприложения» внутри самого «приложения» не сделает ничего сложнее.
Я следую правилу: если я хочу повторно использовать функциональность в другом проекте, это должно быть новое приложение.
Если для этого требуется глубокое понимание моделей в вашем проекте, вероятно, более связно будет привязать его к моделям.
Вот обновленная презентация от 6 сентября 2008 года.
DjangoCon 2008: многоразовые приложения @ 7:53
Taken from the slide
Should this be its own application?
- Is it completely unrelated to the app’s focus?
- Is it orthogonal to whatever else I’m doing?
- Will I need similar functionality on other sites?
If any of them is "Yes"? Then best to break it into a separate application.
Слайд, который я видел, не содержит первого вопроса о «фокусе приложения».
@johnny Это на слайде 31 из 99.
Два лучших ответа на этот вопрос, которые я нашел в Интернете:
Оба источника согласны с тем, что вам следует создавать отдельное приложение в следующих ситуациях:
Лучший ответ на этот вопрос дает Эндрю Годвин (разработчик ядра Django):
На мой взгляд, основная цель приложений - обеспечить логическое разделение повторно используемых компонентов - в частности, первоклассное пространство имен для models / admin / и т. д. - и предоставить простой способ «включить» или «выключить».
В некотором смысле это пережиток времени, когда был создан Django, когда упаковка и модули Python были гораздо менее развиты, и вам в основном приходилось иметь собственное решение проблемы. Тем не менее, это по-прежнему основная часть ментальной модели Django, и я думаю, что INSTALLED_APPS по-прежнему является более чистым и простым решением, чем предложение Python для замены точек входа (что довольно затрудняет отключение пакета, который установлен в среде, но который вы не используете не хочу использовать).
Есть ли что-то конкретное, что, по вашему мнению, можно отделить от концепции приложения сегодня? Он нужен моделям и администраторам для автообнаружения и уникального префикса пространства имен, поэтому его трудно отменить, и я изо всех сил пытаюсь придумать другие функции, для которых он вам нужен (на самом деле, если все, что вам нужно, это просто библиотека, вы можете сделать это обычный Python - нет необходимости в упаковке приложения, если вы не отправляете модели, шаблоны или код администратора IIRC)
Можете ли вы добавить ссылку, из которой вы взяли эту цитату из Годвина?
@JanKanis forum.djangoproject.com/t/why-do-we-need-apps/827
Означает ли это, что если я создаю дочернюю модель, она всегда должна быть в одном приложении? Так как я не могу легко перенести его в другой проект без двух "приложений"