一、背景

用过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(五)Flink 应用部署

环境 代码托管:gitlab CI:tekton CD: tekton pipline/task: 阿里云 serverless容器(spot实例且按秒计费) 应用:K8S Flink 应用需要解决的是任务的灵活增...

阅读全文

CI/CD(四)VM 应用部署

环境 代码托管:gitlab CI:tekton CD: 代码自实现多批次部署 pipline/task: 阿里云 serverless容器(spot实例且按秒计费) 应用:ECS(ESS) 应用部署在弹性...

阅读全文

CI/CD(三)GPU 应用部署(k8s)

环境 代码托管:gitlab CI:tekton CD: ArgoCD pipline/task: 阿里云 serverless容器(spot实例且按秒计费) 应用:k8s GPU应用的特殊性在于单个镜像的大小在...

阅读全文

2 条评论

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

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

欢迎留言