Основы MVC и Django

Довольно плохо знаком с этой сценой и пытаюсь найти некоторую документацию, чтобы принять лучшие практики. Мы создаем довольно большой контент-сайт, который будет состоять из различных медиа-каталогов, и я пытаюсь найти некоторые сопоставимые модели данных / архитектуры, чтобы мы могли лучше понять подход, который мы должны использовать, используя среду, которой у нас никогда не было использовал раньше. Любое понимание / помощь будет принята с благодарностью!

12.12.2008 20:22:29
3 ОТВЕТА

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

Джанго навязывает вам лучшие практики. У вас нет большого выбора и вы не можете сделать много ошибок.

MVC (пока благородное стремление) реализуется следующим образом:

  • Данные определяются в файлах "models.py" с использованием моделей Django ORM.
  • Файл urls.py отображает URL для просмотра функции. Выберите свой URL с умом.
  • Функция просмотра выполняет всю обработку, используя модели и методы в моделях.
  • Презентация (через шаблоны HTML), вызываемая функцией просмотра. По сути, никакая обработка не может быть выполнена в презентации, только легкая итерация и принятие решений

Модель определена для вас. Просто придерживайтесь того, что Django делает естественно, и вы будете счастливы.

Архитектурно, у вас обычно есть такой стек.

  • Apache делает две вещи.

    • обслуживает статический контент напрямую и сразу
    • передает динамический URL Django (через mod_python, mod_wsgi или mod_fastcgi). Приложения Django отображают URL для просмотра функций (которые обращаются к базе данных (через ORM / модель) и отображаются через шаблоны.
  • База данных, используемая функциями просмотра Django.

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

Не стесняйтесь читать документацию Django . Это отлично; пожалуй, лучшее, что есть.

16
12.12.2008 20:37:36
Если вас беспокоит производительность или использование памяти, часто лучше иметь отдельный облегченный веб-сервер (например, Nginx) для обслуживания статического контента, а не использовать Apache для обоих (хотя вы можете получить аналогичный эффект, если вы используете mod_wsgi в режиме демона). и Apache рабочий MPM).
Carl Meyer 26.01.2009 19:17:25
@Carl Meyer: или lighttpd для показа статического контента.
S.Lott 26.01.2009 23:30:05

Во-первых, забудьте все мантры MVC. важно иметь хорошую многоуровневую структуру, но MVC (как определено изначально) не является таковой, это была модульная структура, где каждый модуль GUI разделен на эти подмодули дерева. здесь нечего использовать в сети.

В веб-разработке выгодно иметь многоуровневую структуру, где наиболее важным является уровень хранения / моделирования, который стал называться уровнем модели . Кроме того, вам нужно несколько других слоев, но они действительно не похожи на представления и контроллеры в мире GUI.

слои Django примерно:

  • хранение / моделирование: models.py, очевидно. попытайтесь поместить большинство «рабочих» концепций там. все отношения, все операции должны быть реализованы здесь.
  • диспетчеризация: в основном в urls.py. здесь вы превращаете свою схему URL в пути кода. думайте об этом как о большом операторе switch (). стараться иметь читаемые URL-адреса, которые соответствуют пользовательским намерениям. это очень поможет добавить новые функциональные возможности или новые способы сделать то же самое (например, AJAX UI позже).
  • сбор: в основном функции просмотра, как ваши, так и готовые общие представления. здесь вы просто собираете все модели, чтобы удовлетворить запрос пользователя. в удивительно многих случаях ему просто нужно выбрать один экземпляр модели, а все остальное можно извлечь из отношений. для этих URL достаточно общего вида.
  • презентация: шаблоны. если представление дает вам необходимые данные, достаточно просто превратить их в веб-страницу. именно здесь вы будете благодарны за то, что у классов моделей есть хорошие средства доступа для получения любых соответствующих данных из любого данного экземпляра.
5
12.12.2008 21:12:11

Чтобы понять основы Django и взгляд Django на MVC, обратитесь к следующему: http://www.djangobook.com/

В качестве отправной точки для того, чтобы испачкать руки ... "... пытаясь найти сопоставимые модели данных / архитектуры"

Вот быстрый и грязный способ обратного инжиниринга базы данных для получения файла models.py, который вы затем можете проверить, чтобы увидеть, как django справится с этим.

1.) получить диаграмму, которая точно соответствует вашей цели. Например что-то вроде этого http://www.databaseanswers.org/data_models/product_catalogs/index.htm

2.) Создайте сценарий sql из диаграммы er и создайте базу данных, я предлагаю Postgre, так как некоторые типы таблиц MySQL не будут иметь ограничений по забытому ключу, но в крайнем случае MySQL или SQLITE подойдут

3.) создать и настроить приложение django для использования этой базы данных. Затем запустите: python manage.py inspectdb

По крайней мере, это даст вам файл models.py, который вы можете прочитать, чтобы увидеть, как django пытается его смоделировать.

Обратите внимание, что команда inspect предназначена для быстрого доступа к устаревшей базе данных при разработке в django и поэтому не идеальна. Обязательно прочитайте следующее, прежде чем пытаться это сделать: http://docs.djangoproject.com/en/dev/ref/django-admin/#ref-django-admin

0
12.12.2008 22:56:05