В настоящее время я работаю над проектом, который имеет два варианта использования: первый, с моим клиентским приложением, удаленно обращающимся к моей службе базы данных с некоторыми различными вызовами 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
.
Есть ли лучший подход к этому?
Спасибо!