python - 有没有办法在某个时间运行某个功能?
问题描述
我现在正在制作一个网站,教师在其中宣布作业,学生提交作业。我做了板,他们可以发布他们的公告或提交,但不知道如何检查那些没有提交作业的人。我想要一些在指定时间自动运行的功能(在这种情况下,在作业的截止日期,功能判断和收集没有完成作业的人)
我寻找了一些与日期时间相关的库,但不知道。
作业/模型.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
这篇文章太长了..但问题实际上很简单。我只是想知道是否有一种方法可以使功能在用户输入的某个指定时间工作。
解决方案
你可以在 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 分钟运行一次此函数,或者如果截止日期都是固定的,则只需在特定时间运行该函数。
推荐阅读
- haskell - Haskell - 用另一个函数包装我的函数时出现统一问题
- r - 更新到 v1.63 后 spatstat rbind.hyperframe 崩溃
- asp.net-core - asp.net核心主机上的子域错误404
- reactjs - 反应.map不允许我迭代对象
- c++ - 设置向量
::迭代器> - python - 如何使用 API 请求 python 打印州人口信息
- python - 使用带有声明性基础的烧瓶迁移而不是 db.model
- excel - 创建一个选中和取消选中所有其他复选框的 ActiveX 复选框
- javascript - PHP:在 echo 输出函数名称中调用 javascript 函数
- ti-basic - 有没有办法检查变量在 ti-basic 范围内出现的次数?(对于因子计算器)