В чем разница между сайтом и приложением в Django? - PullRequest
26 голосов
/ 09 апреля 2009

Я знаю, что на сайте может быть много приложений, но во всех примерах, которые я вижу, сайт называется "mysite". Я подумал, что сайт будет названием вашего сайта, например, StackOverflow.

Будете ли вы делать это, а затем иметь такие приложения, как «аутентификация», «вопросы» и «поиск»? Или вам действительно нужен сайт под названием mysite с одним приложением под названием StackOverflow?

Ответы [ 4 ]

25 голосов
/ 09 апреля 2009

У Django на самом деле есть три понятия:

  • Проект (я думаю, это то, что вы называете сайтом): это каталог, который содержит все приложения. Они имеют общий вызов времени выполнения и могут ссылаться друг на друга.

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

  • Сайт : вы можете назначить другое поведение для приложения в зависимости от посещаемого сайта (например, URL). Таким образом, одно и то же «приложение» может настроить себя в зависимости от того, посетил ли пользователь «StackOverflow.com» или «RackOverflow.com» (или как там будет называться версия, ориентированная на ИТ), даже если это одна и та же база кода это обрабатывает запрос.

Как вы это устроите, действительно зависит от вашего проекта. В сложном случае вы можете сделать:

Project: StackOverflowProject
    App: Web Version
        Site: StackOverflow.com
        Site: RackOverflow.com
    App: XML API Version
        Site: StackOverflow.com
        Site: RackOverflow.com
    Common non-app settings, libraries, auth, etc

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

Project: StackOverflowProject
    App: Stackoverflow
        (No specific use of the sites feature... it's just one site)
    App: Plug-in TinyMCE editor with image upload
        (No specific use of the sites feature)

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

8 голосов
/ 09 апреля 2009

Из документации Django :

Проекты и приложения

В чем разница между проектом и приложением? Приложение - это веб-приложение, которое что-то делает, например, система блогов, база данных публичных записей или простое приложение для опроса. Проект - это набор настроек и приложений для определенного веб-сайта. Проект может содержать несколько приложений. Приложение может быть в нескольких проектах.

С по этой ссылке :

Проекты и приложения

Это на самом деле больше отдельный (хотя и связанный) вопрос, но понимание различия, которое Django проводит между «проектом» и «приложением», является большой частью правильной компоновки кода. Грубо говоря, это то, что означают два термина:

  • Приложение пытается предоставить один, относительно автономный набор связанных функций. Прикладной программе разрешено определять набор моделей (хотя это не обязательно), а также определять и регистрировать пользовательские теги и фильтры шаблонов (хотя, опять же, это не обязательно).

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

Представления, пользовательские манипуляторы, пользовательские контекстные процессоры и большинство других вещей, которые Django позволяет вам создавать, могут быть определены на уровне проекта или приложения, и от того, где вы будете работать, должно зависеть то, что наиболее эффективно для вас; в общем, их лучше всего размещать внутри приложения (это увеличивает их переносимость между проектами).

2 голосов
/ 19 апреля 2010

Ответ на ваш проект с одним приложением под названием StackOverflow - однозначный отказ. На таком сайте может быть более 20 приложений.

См. Видео-презентацию Джеймса Беннетта " DjangoCon 2008: многоразовые приложения ", в которой это хорошо объясняется.

0 голосов
/ 09 апреля 2009

Как вы сказали, у вас будет сайт StackOverflow с приложением аутентификации, приложением вопросов и т. Д.

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

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