Сравнение структуры проектов 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 базовых приложения:
- api - где хранятся модули, сериализаторы и урлы .
- core - приложение по умолчанию (то, которое имеет имя вашего проекта Django)
- db - где хранятся модели
Затем, по мере расширения, я могу добавить папку, предназначенную для помощников, утилиты и, возможно, слоев абстракции для внешних сервисов. Я рекомендую прочитать больше о Domain-driven Design, чтобы получить представление о том, как структурировать ваш проект. Вы также можете посмотреть другие проекты Django для вдохновения: