Создайте и сохраните объект сервиса в корне приложения django

Я создал базовое приложение django, в котором установлена пользовательская библиотека (использует Asyncio). Мне нужно инстанцировать фабричный класс из библиотеки, а затем использовать его для получения некоторых объектов сервиса для использования в приложении.

creds = load_creds('./creds.json')
async with TestFactory(creds) as factory:
    tickets = factory.get_ticket()

    results = await tickets.find_by_number('IN12345678')
    print (results.ticket_group)

Я изучаю Django только последние несколько дней. Поэтому я не уверен, где лучше всего разместить этот код. Мне просто нужно, чтобы он сохранял объекты сервиса, которые я создаю из класса фабрики, и делал их доступными для остальной части приложения до тех пор, пока приложение работает, т.е. scaffold once, always accessible.

С точки зрения c#, я мог бы сделать это во время запуска приложения и передать его через DI.

Я обычно помещаю такие вещи в специальный файл monkey_patches.py и импортирую его в центральный urls.py (оба файла в одном каталоге):

monkey_paches.py
# needed imports
def run_monkeypatches():
    # code for patches of some other modules, libraries and so on
urls.py
# all other imports needed for urls 
from .monkeypatches import run_monkeypatches

urlpatterns = [
    # all the urls
]

run_monkeypatches()  # last line in urls.py

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

Альтернативой может быть размещение внутри settings.py и оставление там объектов. Затем вы можете получить доступ к этим объектам через django.conf.settings.my_object из любого другого модуля приложения, который импортирует django.conf.

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