首先定义一个定时任务函数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
![](https://file.jishuzhan.net/article/1777201346458423297/cbdc9cb265a51f6e5d4b2d363f5549cb.webp)
5、查看定时任务
python
python manage.py crontab show
![](https://file.jishuzhan.net/article/1777201346458423297/3f7cb7be9977dc1daa3778d93ab996f2.webp)
6、删除定时任务
python
python manage.py crontab remove
![](https://file.jishuzhan.net/article/1777201346458423297/f33ce3733fb404f88a9dfe06e12fddc6.webp)
7、直接运行定时任务,任务id在你add的时候前面有一个哈希的id
python
python manage.py crontab run <任务id>
![](https://file.jishuzhan.net/article/1777201346458423297/034ce6ee78fc4ffd6192639d7809eeae.webp)
附:项目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 '无需发送短信'