Установка зависимостей (например, клиентов сервисов) в Django

Вид Django API вызывает другой сервис. Чтобы вызвать этот сервис, представлению нужен клиент. Я хотел бы инициализировать глобально экземпляр клиента и передать его представлению. Также, для тестов, я хотел бы иметь возможность легко передразнить клиента.

Я могу сделать несколько ужасных хаков (эй, с Python все возможно!), но я хотел бы сделать это Django-идиоматическим способом.

Я попробовал as_view(**initkwargs) и передать экземпляр клиента. Недостаток в том, что в тестах мне нужно изменять переменную класса (а не переменную экземпляра, что кажется более правильным), а также мне нужно инстанцировать клиента в urls.py, что не похоже на правильное место для инстанцирования таких клиентов (зависимости).

Я рассматривал возможность создания отдельного приложения в INSTALLED_APPS, но это кажется чрезмерным использованием того, что должно делать приложение. В моем случае приложение будет только запускаться AppConfig.ready() и инициализировать клиента для последующего доступа к нему с помощью представления.

Простой Dependency Injection подойдет, но я не хочу переусложнять, если Django поддерживает эквивалентную функциональность.

Где я должен инициализировать такие зависимости в Django, и как потом высмеивать их в тестах?

Вернуться на верх