Как периодически запускать функцию с параметрами?

В моей системе есть форма (DashboardData модель), которую заполняет каждый пользователь. В этой форме мы запрашиваем имя пользователя, пароль и диапазон для обновления для другой системы. Варианты этого диапазона - раз в неделю, раз в месяц и раз в год.

В зависимости от того, какой интервал выберет пользователь, я буду запускать функцию через эти интервалы. В этой функции в качестве параметров я буду получать имя пользователя и пароль из формы, заполненной пользователем. Например, в форме имя пользователя, пароль, раз в неделю, тогда я должен запускать myFunction(имя пользователя, пароль) раз в неделю.

Я пытаюсь использовать apscheduler для этого. Но в apps.py я не могу получить request.user, поэтому я не могу получить данные. Мне нужно взять request.user для запуска моей функции.

forms.py

class SetupForm(forms.ModelForm):
# Time
PERIOD = (
    ('168', 'Once a week'),
    ('720', 'Once a month'),
    ('8766 ', 'Once a year'),
)
    n_username = forms.CharField()
    n_password = forms.CharField(widget=forms.PasswordInput)
    period = forms.CharField(max_length=200, widget=forms.Select(choices=PERIOD)))

    class Meta:
        model = DashboardData
        fields = ('n_username', 'n_password','period')

models.py

class DashboardData(models.Model):
    user = models.ForeignKey(UserProfile, on_delete=models.CASCADE, null=True) # request.user
    n_username = models.CharField(max_length=250)
    n_password = models.CharField(max_length=250)
    period = models.CharField(max_length=250)

functions.py

class myFunction():
    def __init__(self, n_user, n_password):
        self.time = datetime.now().strftime("%Y-%m-%d")
        self.location = a_url
        self.static_fields = {}
        self.index_name = "pre-" + self.zaman
        self.download_all(n_user, n_password)
        self.send_it()

apps.py

class DashboardConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'dashboard'
    def ready(self):
        start()

Периодические задачи сельдерея будет хорошим выбором для выполнения периодических задач.

Затем вы можете использовать Django-celery-beat для контроля в базе данных, когда именно выполняются функции.

В частности, я обращаю внимание на планировщик вкладок cron

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