2016-03-01 4 views
2

Я создаю приложение Django с рядом моделей (5-10). Будет административная сторона, где конечный пользователь управляет данными, а затем пользовательской стороной, где другие конечные пользователи могут только читать данные. Я понимаю, что смысл приложения Django заключается в поощрении модульности, но я не уверен, что «там, где линия нарисована», так сказать.Django - Что представляет собой приложение?

В терминах «лучшие практики»: должна ли каждая модель (или очень родственные группы моделей) иметь собственное приложение? Должно ли быть приложение «admin», а затем приложение «frontend»?

В любом случае, как другие приложения извлекают и используют модели/данные в других приложениях?

ответ

3

Приложения являются логическими разделителями. Например, если на вашем сайте есть блоги, опросы и каналы, у вас могут быть блоги, опросы и подача приложений. Каждое приложение может иметь несколько моделей (например, блоги и Post для блогов), но они могут быть отделены друг от друга по функциям.

Вам не нужно отдельно отделять предметы в отдельных приложениях, если вы этого не хотите. Разделение приложений на приложения очень помогает в переполненности. Если вы думаете, что будете расти дальше 10 моделей, вы можете рассмотреть возможность разделения до того, как он станет слишком тяжелым (django действительно не любит перемещать вещи между приложениями).

Что касается доступа к вещам из других приложений, каждое приложение представляет собой модуль, так что вы все этого

from app1.models import App1Model 

и вы все готовы.

+0

Так, например, для приложения «Блоги» .. будет ли админ и функциональность интерфейса внутри этого приложения? Как насчет приложения «Каналы» - если у администратора есть админ, связанный с администратором Blogs, как они взаимодействуют? Вот где моя путаница - панель администратора, управляющая более чем 10 моделями (которые обычно разделялись на приложения) с одним пользовательским интерфейсом, также управляющим этими моделями (хотя и по-другому). –

+1

Да, как правило, вы разделяете логическое подмножество моделей на приложение и все, что относится к этим моделям, представлениям, администраторам, API и тому, что не входит в одно и то же приложение. Что касается игры вместе, как я уже сказал, приложения на самом деле не изолированы, вы можете импортировать вещи из другого приложения.Например, если вы хотите использовать встроенный админ из приложения A1 в админке приложения A2, вы определяете строку inline в a1/admin.py, импортируете ее в a2/admin.py и добавьте ее в строки. –

1

Python \ Django является модульным.

  1. Приложение должно включать только те модели, которые обычно решают 1 конкретную задачу.
  2. Если некоторые из моделей из p.1 могут быть полезны в других задачах, то, вероятно, было бы лучше создать новые приложения для этих моделей. Т.е. если некоторые модели распределяются между несколькими задачами, тогда существует логика создания новых приложений с этими моделями.

Например, у вас есть приложение для форума. Этот форум имеет такие функции, как опросы, регистрация, PM и т. Д. Логически все, кажется, объединяется вместе. Однако, если ваш сайт - это просто форум - хорошо, но если есть другой контент, например блоги с комментариями, то «модель регистрации» может быть сделана как отдельное приложение и может быть разделена между частями сайта, такими как «блоги с комментарии "и" форум ".

Относительно администратора \ frontend. Я видел приложения \ проекты с более чем 10 моделями вместе. Основываясь на приведенном выше примере форума, если часть администратора не выполняет какую-либо задачу вне сферы действия вашего приложения, я бы сделал администратор и интерфейс внутри одного приложения. В противном случае, если администратор имеет какое-либо отношение к другой задаче, которая выходит за рамки вашего основного приложения, администратор должен быть отдельным приложением.