首先定义一个定时任务函数tasks.py(见文章末尾示例),编写函数,然后在setting.py中配置定时任务
1、首先安装django-crontab
pip install django-crontab
2、在setting.py中添加应用 (在所有自定义注册app之上)
INSTALLED_APPS = [...'django_crontab',
]
在项目根路径setting.py中设置定时任务
# 定时任务
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中加入这行
CRONTAB_COMMAND_PREFIX = 'LANG_ALL=zh_cn.UTF-8'
4、开启定时任务
python manage.py crontab add
5、查看定时任务
python manage.py crontab show
6、删除定时任务
python manage.py crontab remove
7、直接运行定时任务,任务id在你add的时候前面有一个哈希的id
python manage.py crontab run <任务id>
附:项目tasks.py,实际使用中,需根据自己情况编码
# tasks.py
import datetime
import base64
import hashlib
import jsonimport urllib3
import requests
from django.core.mail import send_mailimport GovernmentManagement.settings
from GuaranteeCommitmentLetter.models import MunicipalGuaranteeCommitmentLetter, DistrictGuaranteeCommitmentLetterAuditdef 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_USERrecipient_list = [user_email[i.company_name]]send_mail(subject, message, from_email, recipient_list) # 发送邮件return '邮件发送成功'else:return '无需发送邮件'return '无需发送短信'