Сравнение структуры проектов Django и ruby on rails

После нескольких лет разработки веб-приложений с использованием ruby on rails, я решил попробовать Django, однако кажется, что мне чего-то не хватает - как структурировать большой проект, да и вообще любой проект.

Например, в rails у нас есть папка models, которая содержит классы моделей, каждый в отдельном файле ruby, папка controllers, которая содержит классы контроллеров, опять же каждый в отдельном файле ruby.

Однако, в Django проект разделен на независимые приложения, которые могут быть установлены независимо в другие проекты Django, каждое приложение имеет файл models.py, который содержит все классы моделей, файл views.py, который содержит все функции представления.

Но как тогда группировать функции в представлениях, как в rails? То есть один контроллер на каждую модель.

В общем, как структурировать мой проект, если он содержит одно большое приложение, которое не может быть разделено на несколько независимых приложений? Я хочу, например, иметь функцию view index для каждой модели, но как это сделать, если все функции находятся в одном файле?

Если мой проект, например, посвящен продаже автомобилей. Я должен иметь индексную функцию, которая отображает /cars, другую индексную функцию для отображения /users и т.д...

Я искал в Интернете, но не смог найти подходящего ответа.

Мне неясно, как структурировать приложение Django, поэтому любая помощь будет оценена по достоинству.

Вкратце, Django - это фреймворк Model-View-Template, а Rails - Model-View-Controller.

В Django мы храним контроллеры (своего рода) в файле views.py для каждого определенного приложения, в то время как в MVC-фреймворках, таких как Rails, они хранятся в контроллерах. В Django вам также придется отдельно создавать свой собственный HTML шаблон, что некоторым может показаться утомительным, но благодаря такому разделению проще работать с другими фреймворками, такими как Vue или React.

Это общее сравнение, которое я нашел в сети.

Однако, отвечая на ваши вопросы о структуре папок. В принципе, Django очень гибок в отношении расположения папок, это действительно зависит от того, как вы хотите создать структуру проекта. Обычно я бы сделал так: держите все приложения в главной папке (папке проекта). Таким образом, вы не будете путаться с настройкой venv

Как упоминалось в ответе @shanksfk, Django очень гибок в расположении папок. Вам не обязательно следовать стандартной структуре приложений. Когда я создаю чисто backend Django проект (с DRF), у меня обычно есть 3 базовых приложения:

  1. api - где хранятся модули, сериализаторы и урлы
  2. .
  3. core - приложение по умолчанию (то, которое имеет имя вашего проекта Django)
  4. db - где хранятся модели

Затем, по мере расширения, я могу добавить папку, предназначенную для помощников, утилиты и, возможно, слоев абстракции для внешних сервисов. Я рекомендую прочитать больше о Domain-driven Design, чтобы получить представление о том, как структурировать ваш проект. Вы также можете посмотреть другие проекты Django для вдохновения:

Вернуться на верх