взаимодействие с внешним проектом django из другого проекта django - PullRequest
3 голосов
/ 03 ноября 2011

Я ищу способ взаимодействия с моделями проекта django из отдельного проекта django. Я не имею в виду разные приложения, я имею в виду 2 отдельных проекта с 2 отдельными файлами настроек.

Я нахожусь в процессе миграции старого интернет-магазина (действительно старого, это все статический html) на наш сервер на основе django. Для этого я создал отдельное приложение django, которое будет обрабатывать весь процесс сканирования и синтаксического анализа, используя форму django и несколько представлений для синтаксического анализа с участием человека. Теперь я нахожусь в точке, где мне нужно заполнить данные каталога нашего бэкэнда данными, хранящимися в проекте искателя. Я потратил большую часть последних 2 дней, пытаясь найти метод, но без удачи.

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

Что бы вы предложили? Мне нужны дикие идеи, если я могу взаимодействовать с обеими проектами из одного скрипта.

Ответы [ 2 ]

3 голосов
/ 03 ноября 2011

Я делал это раньше ...

Итак,

Проект A, Проект B

Проект B хочет назвать модели в Проекте A ...

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

Если это так, то вы можете просто импортировать модели из проекта А в проект Б и взаимодействовать с ними, как обычно.

2) Проект B подключается к базе данных, отличной от проекта A.

Вы можете определить две базы данных в файле настроек для проекта B.

DATABASES = {
    'default': {
        'NAME': 'app_data',
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'USER': 'postgres_user',
        'PASSWORD': 's3krit'
    },
    'users': {
        'NAME': 'user_data',
        'ENGINE': 'django.db.backends.mysql',
        'USER': 'mysql_user',
        'PASSWORD': 'priv4te'
    }
}

А затем либо определите db router , чтобы django знал, к какой базе данных обращаться, чтобы получить данные для моделей из проекта A

OR

Вы можете установить расширенную базу данных для использования при вызовах ORM, используя что-то вроде:

Author.objects.using('other').all()

0 голосов
/ 03 ноября 2011

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

При условии, что ваш проект на сканере не зависит от настроек / типа БД, вы должны иметь возможность перенести все ваши обработчики / представления / URL-адреса в новый проект и объединить их вместе?

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

Таким образом, вы можете просто импортировать старые модели в новый проект и напрямую взаимодействовать с ними.

В противном случае вы смотрите на передачу сообщений / сетевое взаимодействие, то есть на межпроцессное взаимодействие.

...