У меня довольно сложный «продукт», который я готовлю к сборке с использованием Django. Я собираюсь избегать использования терминов «проект» и «приложение» в этом контексте, потому что мне не ясно их конкретное значение в Django.
Проекты могут иметь много приложений. Приложения могут быть использованы многими проектами. Хорошо.
Я не заново изобретаю блог или форум - я не вижу, чтобы какая-то часть моего продукта могла быть повторно использована в каком-либо контексте. Интуитивно я бы назвал это «приложение». Затем я делаю всю свою работу в одной папке "приложения"?
Если так ... с точки зрения project.app
пространства имен Django , я склонен использовать myproduct.myproduct
, но, конечно, это не разрешено (но приложение, которое я создаю, - это мой проект, а мой проект - приложение!). Поэтому я склонен полагать, что, возможно, я должен подходить к Django, создавая одно приложение для «значимой» модели, но я не знаю, где провести границы в моей схеме, чтобы разделить ее на приложения - у меня много моделей с относительно сложными отношениями.
Я надеюсь, что есть общее решение для этого ...
Ответы:
Что мешает вам использовать
myproduct.myproduct
? То, что вам нужно для этого, примерно состоит в следующем:и так далее. Поможет ли это, если я скажу, что мне
views.py
не нужно звонитьviews.py
? При условии, что вы можете назвать в пути python функцию (обычно package.package.views.function_name), с которой она будет обрабатываться. Просто как тот. Все эти "проекты" / "приложения" просто пакеты Python.Теперь, как ты должен это сделать? Или, скорее, как я могу это сделать? Ну, если вы создаете значительную часть многоразовой функциональности, как , скажем , редактор разметки, это при создании «приложения верхнего уровня» , которые могут содержать
widgets.py
,fields.py
, иcontext_processors.py
т.д. - все вещи , которые вы могли бы хотеть импорт.Точно так же, если вы можете создать что-то вроде блога в формате, который является довольно общим для установок, вы можете обернуть его в приложении, с его собственным шаблоном, папкой статического содержимого и т. Д., И настроить экземпляр проекта django для использования этого содержание приложения.
Нет жестких и быстрых правил, говорящих о том, что вы должны это делать, но это одна из целей фреймворка. Тот факт, что все, включая шаблоны, позволяет вам включать из какой-то общей базы, означает, что ваш блог должен вписаться в любую другую установку, просто заботясь о своей собственной части.
Тем не менее, для решения вашей реальной проблемы, да, ничего не говорит, что вы не можете работать с папкой проекта верхнего уровня. Это то, что делают приложения, и вы можете сделать это, если действительно хотите. Я, как правило, не по нескольким причинам:
website
. Однако позже я мог бы захотеть разработать оригинальную функциональность только для этого сайта. Чтобы сделать его съемным (независимо от того, делаю я это или нет), я, как правило, создаю отдельный каталог. Это также означает, что я могу отказаться от упомянутой функциональности, просто отсоединив этот пакет от конфигурации и удалив папку, а не сложное удаление нужных URL-адресов из глобальной папки urls.py.Короче говоря, причина, по которой существует соглашение, такая же, как и у любого другого соглашения - это помогает, когда дело касается других, работающих с вашим проектом. Если я увижу,
fields.py
я сразу ожидаю, что код в нем подклассирует поле django, тогда как, если я увижу, уinputtypes.py
меня может быть не совсем понятно, что это значит, не глядя на него.источник
manage.py
, из-за чего невозможно правильно импортировать настройки проекта. Это случилось со мной, и я решил это путем рефакторинга приложения с эффектомmyproduct_app
.После того как вы закончите использование
startproject
иstartapp
, ничто не помешает вам объединить «проект» и «приложение» в одном пакете Python. Проект на самом деле является не чем иным, какsettings
модулем, а приложение - не более чемmodels
модулем - все остальное не является обязательным.Для небольших сайтов вполне разумно иметь что-то вроде:
источник
INSTALLED_APPS
список. Вот пример: stackoverflow.com/a/59739912/399435Я прочитал эту мысль где-то вскоре после того, как начал работать с django, и обнаружил, что часто задаю себе этот вопрос, и он мне помогает.
Ваши приложения не должны быть многоразовыми, они могут зависеть друг от друга, но они должны делать одно.
источник
Я нашел следующие сообщения в блоге очень полезными о приложениях и проектах django:
В принципе, у вас есть большая свобода с django для организации исходного кода вашего продукта.
источник
Там ничего подобного не допускается. Это ваш проект, никто не ограничивает вас. Желательно сохранить разумное имя.
В общем проекте django есть много приложений (contrib-приложений), которые действительно используются в каждом проекте.
Допустим, ваш проект выполняет только одну задачу и имеет только одно приложение (я
main
называю его так, как проект вращается вокруг него и вряд ли может быть подключен). Этот проект также все еще использует некоторые другие приложения вообще.Теперь, если вы говорите, что ваш проект использует только одно приложение (
INSTALLED_APPS='myproduct'
), так что толку отproject
определения проекта какproject.app
, я думаю, вы должны рассмотреть некоторые моменты:Что касается большей части работы, выполняемой в приложении, я думаю, что это относится к большинству проектов django.
источник
main
конвенции - это имеет большой смысл для такого оригинального проекта, как этот. Я планирую добавить «повторно используемые» приложения позже, но сейчас это выходит за рамки моего внимания.Здесь создатели Django сами указывают на эту разницу . Я думаю, что хорошо думать о приложениях, так как они должны использоваться в других проектах . Также хорошим представлением о приложениях в Django предоставляют современные веб-приложения.
Представьте, что вы создаете большое динамическое веб-приложение на основе JavaScript .
Затем вы можете создать приложение в Django с именем, например, «FrontEnd» <- в приложении Thins вы будете отображать контент.
Затем вы создаете несколько бэкэнд-приложений. Например, приложение под названием «Комментарии», в котором будут храниться комментарии пользователей. А приложение «Комментарии» само по себе ничего не отображает. Это будет просто API для запросов AJAX вашего динамического сайта JS .
Таким образом, вы всегда можете повторно использовать приложение «Комментарии». Вы можете сделать его открытым исходным кодом, не открывая исходный код всего проекта. И вы сохраняете чистую логику своего проекта.
источник