Как периодически запускать функцию с параметрами?
В моей системе есть форма (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