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 и отображает данные на веб-интерфейсе.
Это кажется более стабильным, чем прямой доступ к объекту скрипта из веб-потоков (вы рискуете попасть в ошибки, связанные с потоками).