Макет Django и MVC (MVT) - PullRequest
       25

Макет Django и MVC (MVT)

5 голосов
/ 26 июля 2011

Я собираюсь использовать другие основанные на MVC фреймворки и перейти к Django, это кажется немного неловким по отношению к тому, к чему я привык. Например, в других основанных на MVC средах. мой макет может быть так:

root:
- config (houses the config files (like settings), url.conf, db connections, etc.)
- controllers (houses the main logic of each section of the site. The middle ground between views and models)
- models (handles all the data to be validated and anything that interacts with the database. declares the DB structure. each model a class, each attribute a db field. in django, a template?)
- views (the html displayed to the end user, put together by the controllers)
- tests (all the tests)
- plugins (3rd party apps you install into yours.)
- uploads (user uploaded files)
- public_html (the actual public facing files)
-\ css|js|img (the various static file types for page manipulation)
-\ index.html

Это то, к чему я привык, и кажется, что Джанго делает вещи совсем по-другому. Где раньше, если бы у меня было приложение для голосования, у меня было бы:

controllers/PollController.py
models/Poll.py
views/poll/index.py

и это создаст таблицу опроса в БД. Но в Django, как бы я это сделал? Это приемлемый макет? Из того, что я прочитал, выше было бы больше похоже на это:

root:
- project (this would be the main app, and what glues everything together)
--/ settings.py
--/ urls.py
--/ templates/

- apps
-/ Poll
--/ models.py (i would have no Poll.py model, so it would all go in here)
--/ urls.py (any url.conf specific to this model would go in here)
--/ templates/ (the various views for this app)

Хотя это и имеет смысл в некотором смысле, оно просто кажется мне чуждым. Есть ли какое-то преимущество для этого типа макета по сравнению с традиционным макетом mvc, описанным в первом примере? Есть ли другой предпочтительный макет помимо этого? Цель этого «проекта» состоит в том, что ядро ​​будет базовой структурой для моего собственного использования, и у меня есть несколько разных «приложений», которые я буду создавать для каждого использования этой платформы. в старой версии каждое приложение просто расширяло основное, являясь плагином в этом каталоге.

В качестве справочной информации, большая часть моего опыта связана с php и различными фреймворками из этого мира (в основном cakephp, yii), если это имеет значение. Это будет мой первый основной проект в python / django. я просто хочу понять это правильно.

Ответы [ 2 ]

7 голосов
/ 26 июля 2011

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

Если вы подходите к мысли, что сайт представляет собой конгломератнесколько отдельных и, в основном, разных «приложений» с некоторым клеем, чтобы скрепить их вместе, тогда эта организация имеет гораздо больше смысла.

6 голосов
/ 26 июля 2011

Есть ли какое-либо преимущество этого типа макета по сравнению с традиционным макетом mvc, описанным в первом примере?

Да.

То, что вы называете «Традиционным MVC», - это просто еще одна структура.Это не волшебно лучше или более правильно.Это просто по-другому.

Есть ли другой предпочтительный макет помимо этого?

Возможно, есть сотни способов сделать это.Django выбрал тот, который прекрасно подходит для Python и веб-приложений.

Я просто хочу сделать это правильно.

Тогда сделайте это.

  1. Откажитесь от своих предубеждений, оставшихся от других дел, которые вы сделали.

  2. Начните все заново и пусто с Джанго, как полный новичок.

  3. После того, как вы изучили свою 6-ую структуру, вы можете (и только тогда) сравнить и сопоставить шесть выученных структур.Пока вы не выучите шесть, каждый должен восприниматься как новый, полный, уникальный и уникальный.

Пока не сравнивайте и не сравнивайте.

Просто примите Джанго за Джанго и делайте все по-джанговски.

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


Примечания

root # ничего не значит

  • config - Не существует.

  • Контроллеры - Не существует.

  • модели -Модуль Python с определениями классов для постоянных объектов.Карты в схему RDBMS.Может иметь специфичные для модели тесты.

  • views - модуль Python с функциями представления, которые отвечают на запросы и создают ответы.

  • test -- Модуль Python с тестами, специфичными для View и шаблонов.

  • plugins - Не существует.

  • uploads - Runtime, не разработка приложения.

  • public_html - не существует.

  • css | js | img - Статические файлы "Media".Время выполнения, а не разработка.

  • index.html - не существует.

Материал, который вы пропустили

  • templates - страницы шаблонов HTML, используемые функциями просмотра.

  • admin - привязки администратора для сайта администратора по умолчанию.Полагается на модули и формы.

  • формы - определения форм;это классы, которые создают формы, используемые для проверки ввода.

  • urls - сопоставления путей URL для просмотра функций.

  • settings - moduleс конфигурацией базы данных по умолчанию, промежуточным программным обеспечением и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...