Django 异步开发

一、发送邮件

Smtp:轻量级邮件发送协议,邮件的发送和接收人。我们今天采用163邮箱的smtp服务器

在这里插入图片描述
开启163的smtp服务器(绑定自己的手机)

163邮箱地址:https://mail.163.com/

Smtp服务器地址和端口

ssl: smtp.163.com:465

非ssl : smtp.163.com:25

代码实现:

"""
1、发件人
账号:jack_dawson_email@163.com	
密码:*******	
授权码:ymm123

2、收件人
账号:gebidaxiaowang@126.com	
密码:*******
"""



def my_send_email():
    """发邮件"""
    # 导入包
    import smtplib
    from email.mime.text import MIMEText

    # 邮件信息-发件人
    sender = "jack_dawson_email@163.com"
    # 邮件信息-收件人
    receiver = "gebidaxiaowang@126.com"
    # 邮件信息-授权码
    password = "ymm123"
    # 邮件信息-主题
    subject = "发邮件"
    # 邮件信息-内容
    content = "你好,<a href='http://127.0.0.1:8000/'>单击访问<strong>每日生鲜</strong>首页</a>。"

    # 创建邮件文本对象(内容,类型,编码)
    mime_text = MIMEText(content, "html", "utf-8")
    # 赋值属性
    mime_text["Subject"] = subject
    mime_text["From"] = sender
    mime_text["To"] = receiver

    # 创建smtp对象
    my_smtp = smtplib.SMTP_SSL("smtp.163.com", 994)
    # 登录,账号错误会抛异常
    my_smtp.login(sender, password)
    # 发送邮件(发件人,收件人集合,内容)
    my_smtp.sendmail(sender, [receiver], mime_text.as_string())
    # 关闭
    my_smtp.quit()

    print("发送成功")


def my_send_email_many():
    """发邮件-发个多人"""
    # 导入包
    import smtplib
    from email.mime.text import MIMEText

    # 邮件信息-发件人
    sender = "jack_dawson_email@163.com"
    # 邮件信息-收件人
    receiver1 = "gebidaxiaowang@126.com"
    receiver2 = "278455900@qq.com"
    # 邮件信息-授权码
    password = "ymm123"
    # 邮件信息-主题
    subject = "发邮件2"
    # 邮件信息-内容
    content = "你好,<a href='http://127.0.0.1:8000/'>单击访问<strong>每日生鲜</strong>首页</a>。"

    # 创建邮件文本对象(内容,类型,编码)
    mime_text = MIMEText(content, "html", "utf-8")
    # 赋值属性
    mime_text["Subject"] = subject
    mime_text["From"] = sender
    mime_text["To"] = ",".join([receiver1,receiver2])#多个收件人使用逗号隔开

    # 创建smtp对象
    my_smtp = smtplib.SMTP_SSL("smtp.163.com", 994)
    # 登录,账号错误会抛异常
    my_smtp.login(sender, password)
    # 发送邮件(发件人,收件人集合,内容)
    my_smtp.sendmail(sender, [receiver1,receiver2], mime_text.as_string())
    # 关闭
    my_smtp.quit()

    print("发送成功")



if __name__ == '__main__':
    my_send_email()
    # my_send_email_many()
二、发送短信

发送短信需要借助于第三方发送短信平台实现效果,这里我们使用容联云第三方平台

https://www.yuntongxun.com/

三、异步通信框架Celery

开发中有一些任务就是耗时的,比如发短信。怎么解决呢?
在这里插入图片描述
Python 的Celery框架,是一个专门用来处理异步任务的框架

在这里插入图片描述

异步任务:当任务被发起,不会阻塞主线程,会到另外的线程或者进程当中运行,直到结束,返回结果

在工作当中的案例:

验证码的收发,就会使用异步任务

在用户点击发送验证码之后,系统进入发送验证码状态,如果是同步执行,那么这个时候服务器进行阻塞状态,直到验证码发送完成。用户体验很糟糕。于是,在用户点击发送验证码之后,服务器把任务提交给另外的一个进程或者服务器进行执行,完成之后,把结果反馈回来,这样,在发送验证码的过程当中,用户操作不受影响

Celery除了执行异步任务,还可以执行定时任务

user:发起任务的人

broker:任务列表

workers: 执行任务对象,可以是一个线程,一个进程或者一个服务器

store: 结果容器

1、在发送任务之前,worker启动

2、用户发起任务,任务通常以函数的形式存在

3、执行完的结果放回store当中

Celery 最常用的两种任务容器和结果容器是:

1、Redis ,NoSQL数据库,Redis被频繁的使用在并发,分布式当中,Redis可以将数据存在内存当中,运算快

2、RabbitMQ 消息队列,是一个成熟的用于任务存储和转发的消息队列。

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值