Задать вопрос

Организация кода django-проекта, связывание приложений?

Стало вот интересно кто как организует свои джанго проекты:

создаете несколько приложений(по одному для логических разделов аля блог, контакты, новости итд) и в каждом отдельно создаете модели и вьюхи;

храните весь код в корне проекта, разделяя логические разделы дроблением моделей и вьюх на файлы и только многоразовый код выносите в приложения;

другие варианты;?

Если плодите приложения то как организуете взаимодействие между ними(речь не о шаблонах, а о логике)?



Просто изучаю джангу на практике, реализую довольно крупный проект, и вот после месяца писанины пришол к выводу что мой подход совсем не оптимален и мешает придерживатся KISS и DRY, потому очень прошу поделитесь опытом.
  • Вопрос задан
  • 5005 просмотров
Подписаться 6 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 4
printf
@printf
Ем детей.
По-хорошему приложение в django — юниксвей в чистом виде: делает что-то одно, делает это хорошо, обладает неким внешним API для взаимодействия с другими модулями. Обычно даже в небольшом проекте насчитывается около десятка приложений. Плюсы такого подхода — значительно легче тестировать, повторно использовать код, можно сравнительно безболезненно менять имплементацию модуля, не нарушая работу всего сайта.

Антипаттерн — монолитные приложения (обычно буквально одно-два). Их, помимо прочего, тяжелее поддерживать, поскольку код выполняет множество не связанных напрямую задач (функции, отвечающие за генерацию RSS и смену аватарки пользователя, находятся рядом — в таком файле ничего не получится сделать без поллитры и ctrl-F). Это особенно актуально, когда в команду добавляется новый разработчик.

Взаимодействие приложений — гораздо более обширная тема, ее вот так запросто в двух предложениях не раскрыть, как мне кажется.
Ответ написан
Комментировать
k12th
@k12th
console.log(`You're pulling my leg, right?`);
У меня не большой опыт с Django, но, кажется, именно такой метод дробления и используется — отдельные приложения под каждую задачу.
А насчет взаимодействия — так на то и есть в питоне очень гибкая система импортов, не?
Ответ написан
@immaculate
Программист-путешественник
У меня большое и старое приложение на Django. Используется баланс между двумя этими подходами: большая часть функциональности в одном большом приложении, разбита в пакетах по модулям, типа:
— big_app
— models
— profile.py
— content.py
— events.py
— forum.py
— views
— forum.py
— event.py

Часть вынесена в отдельные приложения, не понимаю зачем, ибо они все равно не могут использоваться повторно, так как слишком завязаны на специфику приложения и используют импорты из главного приложения. Но не я создавал эту структуру. Я бы, наверное, вместо этого добавлял бы модули в существующее большое приложение, а в отдельные приложения выносил бы только код, который можно использовать повторно (такого у нас немного, но есть).
Ответ написан
@mineevburyat
Хорошей практикой будет создать дополнительную модель, которая объединит интересные вам модели. Например есть три независимых приложения: Блог, Библиотека и полезные ссылки, которые по отдельности выполняют функционал хорошо, с категориями метками, актуальностью и пр.
Требуется связать блог с несколькими полезными ссылками и несколькими полезными книгами.
Тогда лучше создать модель которая связывает пост блога как один к одному, а полезные ссылки и книги как один ко многим с возможностью пустого поля. И вуаля. Статья может быть связана или не связана с несколькими книгами и полезными ссылками.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы