Почему в руководстве только одна база данных для приложений Django?

Мне нужно еще одно приложение на моем веб-сайте Django, но я не понимаю, как расширить свои знания из учебника.

Следуя уроку , структура моего проекта выглядит следующим образом:

- mydjango/
  - db.sqlite
  - firstapp/
  - mysite/

В учебнике говорится

… Приложение может находиться в нескольких проектах. …

Насколько я понимаю, эта цитата и Джанго таковы, что проблемы разделены.
Однако обработка базы данных в руководстве противоречит этой концепции.

  1. Как приложение может находиться в другом проекте? База данных проекта находится даже не в каталоге родительского проекта. Все просто смешано в одной базе данных.
  2. Почему у каждого приложения нет собственной базы данных?

Похоже, вы путаете приложения, проекты и базы данных. Приложение как таковое не имеет базы данных. Он просто определяет модели и представления (и, возможно, другие вещи). Проект объединяет несколько приложений в одну работающую «штуку». А базы данных настраиваются на уровне проекта. И один проект обычно имеет одну базу данных, но вы можете настроить несколько баз данных для каждого проекта и даже настроить так, чтобы каждое приложение в вашем проекте использовало другую базу данных.

deceze 05.08.2024 11:46

Что такое мойсайт/? Подпроект? Еще одно приложение?

16171413 05.08.2024 11:51

@16171413 проект

jjk 05.08.2024 11:54

Итак, mydjango/ — это родительский каталог, содержащий проект, базу данных и приложения. Не имеет отношения к вашему вопросу, но, по моему мнению, создание проекта с помощью django-admin startproject mysite . дает лучшую структуру вашего проекта.

16171413 05.08.2024 12:06
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Не все приложения находятся в каталоге проекта. На самом деле, вероятно, большинство ваших приложений этого не делают. django.contrib.auth, например, — это приложение, предлагаемое Django, которое находится в самом репозитории Django.

Многие пакеты Django экспортируют приложения django. Вы можете установить его, например, через pip, и, пока он находится в рамках интерпретатора Python, вы можете его импортировать.

Почему у каждого приложения нет собственной базы данных?

Вероятно, это была бы (очень) плохая идея: каждое приложение может работать с нулевой, одной или несколькими базами данных, а маршрутизация может осуществляться через маршрутизатор базы данных или с помощью .using(…) [Django-doc]. Многие модели, определенные в приложениях, связаны друг с другом. Например, у многих моделей есть внешний ключ к auth.User (модель User, определенная в приложении django.contrib.auth). Если бы они были определены в отдельной базе данных, вы не смогли бы применять FOREIGN KEY ограничения, не эффективно создавать JOIN и т. д., что сильно ограничило бы то, что вы можете делать с моделью.

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

По сути, Django стремится отделить логику приложения от базы данных. В настройке БАЗЫ ДАННЫХ [Django-doc] вы можете определить несколько баз данных, и это могут быть базы данных разных типов (PostgreSQL, MySQL, SQL Server, SQLite, MongoDB и т. д.). Затем, используя маршрутизатор базы данных [Django-doc] или явно указав базу данных в запросе, вы можете выбрать базу данных, которую хотите использовать, и, таким образом, даже, например, динамически переключаться. Django стремится быть инвариантным к диалектам, хотя это имеет некоторые ограничения. Таким образом, это означает, что если вы не используете расширенные функции базы данных, вы можете заменить один тип базы данных на другой, не меняя свой код. Приложения ортогональны базе данных: они сами по себе не имеют особого отношения к выбранной базе данных.

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

Abdul Aziz Barkat 05.08.2024 12:21

@AbdulAzizBarkat: да, я добавил дополнительный раздел.

willeM_ Van Onsem 05.08.2024 12:54

Другие вопросы по теме