Django项目定时任务django-crontab

首先定义一个定时任务函数tasks.py(见文章末尾示例),编写函数,然后在setting.py中配置定时任务

1、首先安装django-crontab

python 复制代码
pip install django-crontab

2、在setting.py中添加应用 (在所有自定义注册app之上)

python 复制代码
INSTALLED_APPS = [
    ...
    'django_crontab',
]

在项目根路径setting.py中设置定时任务

python 复制代码
# 定时任务
CRONJOBS = [
    # 每分钟发送一条通知
    # app:为应用名,cron为py文件名,inform为文件中的函数
    ('0 12 * * *', 'GuaranteeCommitmentLetter.tasks.Dacheck_and_send_email'),  # 每天12点执行
    ('0 12 * * *', 'GuaranteeCommitmentLetter.tasks.Macheck_and_send_email'),
    ('0 12 * * *', 'GuaranteeCommitmentLetter.tasks.Macheck_and_send_dingtalk'),
    ('0 12 * * *', 'GuaranteeCommitmentLetter.tasks.Dacheck_and_send_dingtalk'),
    ('0 12 * * *', 'GuaranteeCommitmentLetter.tasks.Macheck_and_send_mas'),
]

3、非英文字符处理,在setting.py中加入这行

python 复制代码
CRONTAB_COMMAND_PREFIX = 'LANG_ALL=zh_cn.UTF-8'

4、开启定时任务

python 复制代码
python manage.py crontab add

5、查看定时任务

python 复制代码
python manage.py crontab show

6、删除定时任务

python 复制代码
python manage.py crontab remove

7、直接运行定时任务,任务id在你add的时候前面有一个哈希的id

python 复制代码
python manage.py crontab run <任务id>        

附:项目tasks.py,实际使用中,需根据自己情况编码

python 复制代码
# tasks.py
import datetime
import base64
import hashlib
import json

import urllib3
import requests
from django.core.mail import send_mail

import GovernmentManagement.settings
from GuaranteeCommitmentLetter.models import MunicipalGuaranteeCommitmentLetter, DistrictGuaranteeCommitmentLetterAudit


def Macheck_and_send_email():
    unit_company = MunicipalGuaranteeCommitmentLetter.objects.filter(guarantee_time__lt=datetime.datetime.now(), audit_status=0)
    user_email = {}
    for i in unit_company:  # 获取company_name字段的值
        user_email[i.company_name] = i.user_email  # 获取email字段的值
    system_name = {}
    for i in unit_company:  # 获取company_name字段的值
        system_name[i.company_name] = i.system_name  # 获取email字段的值

    if unit_company:
        for i in unit_company:
            # 发送邮件
            subject = '标题'
            message = 内容
            from_email = GovernmentManagement.settings.EMAIL_HOST_USER
            recipient_list = [user_email[i.company_name]]
            send_mail(subject, message, from_email, recipient_list)  # 发送邮件
        return '邮件发送成功'
    else:
        return '无需发送邮件'

        return '无需发送短信'
相关推荐
2501_9219608514 分钟前
协同本体论:元公理体系、普适演化律则与工程范式统一构建
python·重构·numpy·pandas·scipy
ltl15 分钟前
【大模型基础设施工程】03:CUDA 生态——cuBLAS、cuDNN、NCCL、Triton、CUTLASS
后端
小锋java123420 分钟前
【技术专题】Matplotlib3 Python 数据可视化 - Matplotlib3 绘制热力图(Heatmap)
python
书到用时方恨少!21 分钟前
Python 面向对象进阶:多态——同一个接口,千种面孔
开发语言·python·多态·面向对象
wan_jm25 分钟前
Go Web 开发提速 3(gos):Filter 实战与变量注入 —— 通用逻辑复用与依赖解耦
后端
AC赳赳老秦25 分钟前
OpenClaw实战案例:用Agent实现每日工作日报自动生成+发送
人工智能·python·职场和发展·eclipse·github·deepseek·openclaw
rannn_11126 分钟前
【Redis|原理篇2】Redis网络模型、通信协议、内存回收
java·网络·redis·后端·缓存
qq_1898070326 分钟前
html标签如何提升可访问性_aria-label与title区别【指南】
jvm·数据库·python
qq_349317481 小时前
mysql如何设置定时自动备份脚本_编写shell脚本与cron任务
jvm·数据库·python
2401_832365521 小时前
Chart.js 4 中基于数据实际范围的线性渐变填充方案
jvm·数据库·python