一、背景

用过django的人应该都有被其强大、特方便、特丰富的管理后台所震撼,在安装好celery、django-celery模块后,会内置一套task的管理页面,如下图:

django-admin的celery页面

crontab配置页面

periodic tasks 配置页面

二、实现

但是这都是django-admin模板中的,我的需求是将这个功能跟自己的运维平台整合到一起,面对这个需求主要是操作两个模型,crontab和periodictask

1. Crontab

Crontab比较简单,就一张表,其实直接写个ModelForm去操作他的模型就可以了

lib/python3.6/site-packages/django_celery_beat/models.py

2. Periodic Task
Periodic Task稍微复杂一点,因为涉及到register task,不过经分析django-admin的中Periodic Task其时是通过“lib/python3.6/site-packages/django_celery_beat/admin.py”中的“PeriodicTaskForm”去操作“PeriodicTask”这个模型的,其实我们可以直接调用这个已经写的好的ModelForm

lib/python3.6/site-packages/django_celery_beat/admin.py

2.1 Crontab

2.1.1 Crontab ModelForm

有了上面的线索,我们现在来写Crontab的Form

2.1.2 Crontab Create&Update View

2.1.3 Crontab Url

2.1.4 Crontab Create&Update Template

Create和Update共用同一个template

2.1.5 页面效果

2.2 Periodic Task

有了上面的线索,我们直接调用现成的就行

2.2.1 Periodic Task Create&Update View

2.2.2 Periodic Task Url

2.2.3 Periodic Task Create&Update Template

Create和Update共用同一个template

2.2.4 页面效果



如果想赏钱,可以用微信扫描下面的二维码,一来能刺激我写博客的欲望,二来好维护云主机的费用; 另外再次标注博客原地址 itnotebooks.com 感谢!

手把手搭建CI/CD(一)

gitlab + tekton + argoCD

阅读全文

自动分析国家关于每年的法定节假日安排公告,生成查询接口自动判断作息日

背景 工作中经常遇到需要根据作息去做排班系统、跑定时报表任务、统一告警通道、巡检等等场景,之前是比较粗暴的区分周一~周五、周六和周日这样,遇到法定节...

阅读全文

Golang Terraform 创建阿里云ECS云主机

封装NewTerraform方法 将Terraform的环境相关信息都在这个方法内定义完成 1. Terraform工作目录定义 2. Plugins初始化,考虑到在线初始化太慢,这里是提前下...

阅读全文

2 条评论

  1. 请问periodictask的注册函数列表是怎么获取的?文章并没有提到,请问有源码吗?

    1. celery包中有个current_app的tasks属性是获取当前项目中所有注册的task,另外建议对页面没有太多自定义的内容的话,完全可以直接使用或继成celery包中Form类“from django_celery_beat.admin import PeriodicTaskForm“

欢迎留言