Подтвердить что ты не робот

В чем разница между сайтом и приложением в Django?

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

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

4b9b3361

Ответ 1

На самом деле Django имеет 3 понятия:

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

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

  • Сайт. Вы можете назначить другое поведение для приложения на основе посещаемого сайта (то есть: URL). Таким образом, одно и то же "приложение" может настраиваться самостоятельно, независимо от того, посетил ли пользователь "StackOverflow.com" или "RackOverflow.com" (или что-то, что будет вызываться с помощью IT-целевой версии), хотя это одна и та же кодовая база которые обрабатывают запрос.

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

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 just one site)
    App: Plug-in TinyMCE editor with image upload
        (No specific use of the sites feature)

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

Ответ 2

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

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

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

От эта ссылка:

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

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

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

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

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

Ответ 3

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

См. Джеймс Беннетт DjangoCon 2008: Многоразовые приложения", которая объясняет это красиво.

Ответ 4

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

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