Использование тестовой среды Django для доступа к базам данных из внешней оболочки django - PullRequest
0 голосов
/ 27 февраля 2019

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

Я нашелследующий код для работы из manage.py shell:

from django.test import Client

client = Client()
resp   = client.get("/api/call/path").json()

Однако я не могу заставить его работать вне параметров manage.py.Сначала я запускаю следующий код:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "DataSite.settings")
django.setup()

Но затем, когда я запускаю сниппеты, чтобы запустить клиент, я получаю следующую ошибку:

[exception.py:135:handle_uncaught_exception() ] Internal Server Error: /api/call/path
Traceback (most recent call last):
<Traceback here>
OperationalError: could not connect to server: Connection refused
    Is the server running on host "127.0.0.1" and accepting
    TCP/IP connections on port 5432?

Я пыталсявыполните шаги, которые утилита manage.py использует для запуска своей оболочки, но не может полностью воспроизвести информацию об этом сервере, работающем в фоновом режиме.

Что-то мне не хватает?В качестве альтернативы, есть ли лучший способ сделать это?

Обновление

Я создал специальный вызов команды, чтобы сделать то, что я хочу.Теперь, когда я запускаю manage.py mycustomcommand, я получаю ожидаемый результат.Однако, когда я пытаюсь заставить мой другой файл python выполнить то же самое через call_command, я получаю следующую ошибку:

django.db.utils.OperationalError: could not connect to server: Connection refused
    Is the server running on host "127.0.0.1" and accepting
    TCP/IP connections on port 5432?

Я попытался сделать это с помощью вызова call_command из django.core.management, а также в операциях, которые выполняет manage.py, с установкой переменной окружения django settings и последующим вызовом execute_from_command_line.

Есть ли лучший подход к этому?

Спасибо!

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