首页 > 解决方案 > 有没有办法在某个时间运行某个功能?

问题描述

我现在正在制作一个网站,教师在其中宣布作业,学生提交作业。我做了板,他们可以发布他们的公告或提交,但不知道如何检查那些没有提交作业的人。我想要一些在指定时间自动运行的功能(在这种情况下,在作业的截止日期,功能判断和收集没有完成作业的人)

我寻找了一些与日期时间相关的库,但不知道。

作业/模型.py

class Assignment(models.Model):
    group = models.ForeignKey(Group, on_delete=models.CASCADE)
    index_in_group = models.IntegerField()
    title = models.CharField(max_length=30, verbose_name='name')
    content = models.TextField(verbose_name=content')
    due_date = models.DateTimeField(verbose_name='due')
    created_at = models.DateTimeField(auto_now_add=True)

class Done(models.Model):
    assignment = models.ForeignKey(Assignment, on_delete=models.CASCADE)
    index_in_assignment = models.IntegerField()
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    done_img = models.ImageField(upload_to='AssignmentsDone')
    injung = models.IntegerField(default=0)
    created_at = models.DateTimeField(auto_now_add=True)

该功能将是这样的:(不是确切的 - 只是备忘录)

def check_submission(request, assignment_id):  
    members = Members of the group (I will retrieve this thoroughly when actually code)
    submissions = Done.objects.filter(assignment.id = assignment_id)
    did_hw = [x.author for x in submissions]
    for member in members:
        if member not in did_hw:
            mark as unsubmitter

这篇文章太长了..但问题实际上很简单。我只是想知道是否有一种方法可以使功能在用户输入的某个指定时间工作。

标签: pythondjango

解决方案


你可以在 Django 中使用 celery:

芹菜

然后,如果您有这样的功能:

@shared_task
def add(x, y):
    return x + y

您将可以在管理面板上访问它,并且可以安排它运行的时间。

有几种方法可以运行任务:

1 - 以间隔运行任务。(例如每 10 秒)

2 - 延迟任务。( task_function.delay())

3 - 安排在特定时间运行任务。

注意:周期性任务需要 celery beat:celery/django-celery-beat

在您的情况下,您可以创建一个检查所有作业的函数,然后每 5 分钟运行一次此函数,或者如果截止日期都是固定的,则只需在特定时间运行该函数。


推荐阅读