django_Celery 定时任务保存到数据库
1.安装相关模块
pip install django-celery-beat
pip install django-celery-results
2.Setting配置修改
INSTALLED_APPS = [
***
'django_celery_beat',
'django_celery_results',
]
#配置定时任务连接数据库
CELERY_RESULT_BACKEND = 'django-db'
#配置定时任务存储数据库中
CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler'
运行同步数据库
python manage.py migrate
登录后台即可配置任务
后台自动会把tasks.py文件里的函数同步过来
任务添加:

任务结果

自定义接口创建定时任务
1.创建一个 Django 视图(view)来处理前端传递的定时任务数据。在你的应用程序中的 views.py 文件中添加以下代码:
from django.http import JsonResponse
from django_celery_beat.models import PeriodicTask, IntervalSchedule
def create_periodic_task(request):
# 处理前端传递的定时任务数据
task_name = request.POST.get('task_name')
task_interval = request.POST.get('task_interval')
# task_args = request.POST.get('task_args', '{}') # 获取任务参数,默认为空字典
try:
# 将任务参数转换为 JSON 格式
task_args_json = json.loads(task_args)
except json.JSONDecodeError:
return JsonResponse({'status': 'error', 'message': 'Invalid task_args format'}, status=400)
# 将任务参数转换为 JSON 格式
task_args_json = json.loads(task_args)
except json.JSONDecodeError:
return JsonResponse({'status': 'error', 'message': 'Invalid task_args format'}, status=400)
# 创建定时任务间隔对象
interval, _ = IntervalSchedule.objects.get_or_create(every=task_interval, period=IntervalSchedule.SECONDS)
# 创建新的定时任务
periodic_task = PeriodicTask.objects.create(
name=task_name,
interval=interval,
task='mycelery.tasks.my_custom_task', # 替换为你的 Celery 任务函数路径
# kwargs=json.dumps(task_args_json), # 任务参数 必须为json字符串形式
) # 返回成功响应给前端 return JsonResponse({'status': 'success', 'task_id': periodic_task.id})
2. 在你的应用程序中的 urls.py 文件中,创建一个 URL 映射将该视图和相应的 URL 关联起来。例如:
from django.urls import path
from mycelery.views import create_periodic_task
app_name = 'mycelery'
urlpatterns = [
path('create-periodic-task/', create_periodic_task, name='create_periodic_task'),
]
3. 在前端页面中,使用 AJAX 或表单提交等方式调用该接口来发送定时任务数据。例如,使用 jQuery 的 AJAX 方法:
$.ajax({
url: '/create-periodic-task/',
method: 'POST',
data: {
task_name: 'Your task name here',
task_interval: 5, // 确定你的任务时间间隔
},
success: function(response) {
// 成功处理响应
console.log(response);
},
error: function(error) {
// 处理错误
console.log(error);
}
});
通过postman调用接口验证

后台查看,添加成功

前端实现逻辑:
实际的任务函数名称在tasks中并没有,所以前端真正创建的时候 可以先创建task函数,然后任务名称是从task函数中筛选出来的。
浙公网安备 33010602011771号