Django 异步开发

一、发送邮件

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

Django 异步开发_第1张图片
开启163的smtp服务器(绑定自己的手机)

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

Smtp服务器地址和端口

ssl: smtp.163.com:465

非ssl : smtp.163.com:25

代码实现:

"""
1、发件人
账号:[email protected]	
密码:*******	
授权码:ymm123

2、收件人
账号:[email protected]	
密码:*******
"""



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

    # 邮件信息-发件人
    sender = "[email protected]"
    # 邮件信息-收件人
    receiver = "[email protected]"
    # 邮件信息-授权码
    password = "ymm123"
    # 邮件信息-主题
    subject = "发邮件"
    # 邮件信息-内容
    content = "你好,单击访问每日生鲜首页。"

    # 创建邮件文本对象(内容,类型,编码)
    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 = "[email protected]"
    # 邮件信息-收件人
    receiver1 = "[email protected]"
    receiver2 = "[email protected]"
    # 邮件信息-授权码
    password = "ymm123"
    # 邮件信息-主题
    subject = "发邮件2"
    # 邮件信息-内容
    content = "你好,单击访问每日生鲜首页。"

    # 创建邮件文本对象(内容,类型,编码)
    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

开发中有一些任务就是耗时的,比如发短信。怎么解决呢?
Django 异步开发_第2张图片
Python 的Celery框架,是一个专门用来处理异步任务的框架

Django 异步开发_第3张图片

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

在工作当中的案例:

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

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

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

user:发起任务的人

broker:任务列表

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

store: 结果容器

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

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

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

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

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

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

你可能感兴趣的:(Django,队列,python)