首页 > 解决方案 > 如何定期运行带参数的函数?

问题描述

我的系统上有一个表格(DashboardData模型),每个用户都要填写。在这种形式中,我们要求为另一个系统提供用户名、密码和要更新的范围。此范围内的选项为每周一次、每月一次和每年一次。

根据用户选择的时间间隔,我将在这些时间间隔运行一个函数。在这个函数中,我将从用户填写的表单中获取用户名和密码作为参数。例如,在表单用户名、密码中,选择每周一次,然后我必须每周运行一次 myFunction(username, password)。

我试着用apscheduler这个。但是在apps.py 中我无法访问request.user,所以我无法获取数据。我必须使用 request.user 来运行我的功能。

表格.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')

模型.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)

函数.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()

应用程序.py

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

标签: pythondjango

解决方案


Celery 周期性任务将是运行周期性任务的不错选择。

然后,您可以使用Django-celery-beat在数据库中准确控制函数何时执行。

具体来说,我提请注意cron 选项卡调度程序


推荐阅读