前两篇介绍了个人对django 的简单理解。
其实熟悉了流程,后面开发就是自由发挥了,感觉还是比较简单的。
这种封装好的框架,只要做出了一个小功能,后面就能推出一百个。对着已有的框架套逻辑,都是大同小异的。就不多介绍了。
如果有人需要的话,可以留言或私信我。(虽然写的很low,但整体功能还是有的)
---------------------------
今天介绍 django-apscheduler 与 email 邮件结合,实现邮件定时检测与智能发送。
django自己封装了crontab,可以实现定时调度。但局限于linux系统,我这边测试机是windows的,没法用。如果非要在windows下用django-crontab 也不是不可以。需要更改一下django-crontab包里的一些配置。百度上都能搜到。但考虑到,本机要改,测试也要改,生产环境也要改,改来改去很麻烦,就干脆换了一个调度工具 django-apscheduler 支持windows。
准备工作:
1.pip install django-apscheduler
2.在INSTALLED_APPS中加入django-apscheduler应用
3.python manage.py migrate
然后:
不解释,直接上这段代码。懂得都懂
在view.py下
from apscheduler.schedulers.background import BackgroundScheduler
from django_apscheduler.jobstores import DjangoJobStore, register_events, register_job
# filter出符合条件的数据并 count
def hr_mail_confirm_check():
result = Project.objects.filter(xx=xx).count()
if result:
hr_mail_confirm_send(str(result))
else:
print("当前数量为:%s"%(result))
# 调度器实例化
scheduler = BackgroundScheduler()
scheduler.add_jobstore(DjangoJobStore(), 'default')
# 调度方案,每天 11点08分 执行
@register_job(scheduler, 'cron', id='test', hour=11,minute=8,args=['test'])
def test(s):
print("***********************************")
hr_mail_confirm_check()
register_events(scheduler)
# 调度器注册并start。这一步在启动项目时就以完成,每次执行后会更新数据库里的任务状态及下一次执行时间
scheduler.start()
---------------------------------------------------------------------------------------------------------------------
#其中:判断存在,hr_mail_confirm_check().hr_mail_confirm_send(str(result)) 执行发送邮件
发送邮件:此处引用网易163的smtp服务,即首先你要有一个163邮箱。其次你要去163的设置中打开smtp服务,自然也会生成一个代理密码。
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.utils import formataddr
def hr_mail_confirm_send(result):
my_sender = 'xxx' # 发件人邮箱账号(163邮箱)
my_pass = 'xxx' # 发件人邮箱密码(163的代理密码)
my_user = 'xxx' #(收件人邮箱,可以是多个 逗号分割)
ret = True
try:
msg = MIMEText('当前存在待处理数量为:%s'%(result),'plain', 'utf-8')
msg['From'] = formataddr(["xxxxxxx", my_sender]) # 括号里的对应发件人邮箱昵称、发件人邮箱账号
msg['To'] = formataddr(["xxxxxxxxxxx", my_user]) # 括号里的对应收件人邮箱昵称、收件人邮箱账号
msg['Subject'] = "xxx" # 邮件的主题,也可以说是标题
server = smtplib.SMTP_SSL("smtp.163.com", 465) # 发件人邮箱中的SMTP服务器,端口是465 不同邮箱地址和端口都不一样
server.login(my_sender, my_pass) # 括号中对应的是发件人邮箱账号、邮箱密码
server.sendmail(my_sender, [my_user, ], msg.as_string()) # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
server.quit() # 关闭连接
except Exception:
ret = False
if ret:
print("邮件发送成功")
else:
print("邮件发送失败")
python manage.py runserver 起飞~
当然,也可以做一些收件人的条件筛选,具体定制邮件,数据库表格,回复检验等等,各种开发,自由发挥。