Установка зависимостей (например, клиентов сервисов) в Django
Вид Django API вызывает другой сервис. Чтобы вызвать этот сервис, представлению нужен клиент. Я хотел бы инициализировать глобально экземпляр клиента и передать его представлению. Также, для тестов, я хотел бы иметь возможность легко передразнить клиента.
Я могу сделать несколько ужасных хаков (эй, с Python все возможно!), но я хотел бы сделать это Django-идиоматическим способом.
Я попробовал as_view(**initkwargs)
и передать экземпляр клиента. Недостаток в том, что в тестах мне нужно изменять переменную класса (а не переменную экземпляра, что кажется более правильным), а также мне нужно инстанцировать клиента в urls.py
, что не похоже на правильное место для инстанцирования таких клиентов (зависимости).
Я рассматривал возможность создания отдельного приложения в INSTALLED_APPS, но это кажется чрезмерным использованием того, что должно делать приложение. В моем случае приложение будет только запускаться AppConfig.ready()
и инициализировать клиента для последующего доступа к нему с помощью представления.
Простой Dependency Injection подойдет, но я не хочу переусложнять, если Django поддерживает эквивалентную функциональность.
Где я должен инициализировать такие зависимости в Django, и как потом высмеивать их в тестах?