Django: Где хранить главный объект и ссылаться на него из views.py + выполнять повторяющийся код?

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

Однако я не могу понять, куда поместить свой код в файлах Django. До того, как я попробовал Django, у меня был просто цикл while True, который делал резервирование, как только условие становилось истинным. Чтобы сделать это в Django, мне нужно создать главный объект при запуске и ссылаться на него из различных представлений в файле views.py. И мне нужно запустить некое расписание, которое проверяет условие, если резервирование должно быть сделано. Все это параллельно с реальным кодом сайта.

Использование celery кажется сложным и излишним для этого. Существует ли основной объект Django, который создается при запуске и может быть доступен из других файлов (например, views.py)? Тогда я мог бы создать родительский класс этого класса, который содержит мой основной код и позволяет запускать и управлять параллельными заданиями.

Например, я посмотрел AppConfig, но не знаю, как ссылаться на этот объект из других файлов...

class ReservationAppConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'reservation_app'
    driver = None

    def ready(self):
        # python manage.py runserver runs the ready method twice — once in each of two processes —
        # but we only want to run it once.
        if os.environ.get('RUN_MAIN', None) != 'true':
            self.driver = Safari()
            self.driver.get(LIB_ADRESS)

Я предлагаю следующий подход:

Вы создаете команду управления с помощью своего while True: скрипта.

from django.core.management import BaseCommand

class Command(BaseCommand):
    def handle(self, *args, **options):
        while True:
            ... # your previous script + storing data into DB via Django models

Этот скрипт изменяет состояние в базе данных. Поэтому после каждого цикла он сохраняет или обновляет некоторые [Django модели])https://docs.djangoproject.com/en/4.0/topics/db/models/).

Django View получает эти модели из DB и отображает данные на веб-интерфейсе.

Это кажется более стабильным, чем прямой доступ к объекту скрипта из веб-потоков (вы рискуете попасть в ошибки, связанные с потоками).

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