django框架入门与解读 (三)-ApScheduler 调度任务

前两篇介绍了个人对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   起飞~

 

当然,也可以做一些收件人的条件筛选,具体定制邮件,数据库表格,回复检验等等,各种开发,自由发挥。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值