今天在做用户注册发送激活邮件时,看到邮件发送比较耗时,而且界面会卡在哪里,当时啪一下,马上就想到了使用多线程发送异步邮件,很快嗷。
但是,实现了后运行发现什么运行在什么之外,什么应用上下文上下文,马上看了下官方文档http://www.pythondoc.com/flask/appcontext.html,吧啦吧啦的。
下面完整代码,send_email.py,最关键的是应用上下文app.app_context()
from flask_mail import Message
from exts import mail # 已经初始化过的mail对象
import threading
def async_send_mail(msg):
'''异步发送邮件'''
# 刚开始app还没创建,所在在使用到的时候再导入
from app import app
# 创建应用上下文(这里是最关键的)
with app.app_context():
mail.send(message=msg)
def send_mail(email=None, token=None):
'''发送激活邮件
email:收件人邮箱
token:加密传输令牌
'''
msg = Message(subject='主题', recipients=[email])
msg.html = '''
<h1>欢迎注册</h1>
点击下面链接激活账号(24小时后过期)<br>
<a href="http://127.0.0.1:8000/?token=token">立即激活</a>
'''
# 创建一个线程,并启动
t = threading.Thread(target=async_send_mail, args=(msg))
t.start()
if __name__ == '__main__':
print('pass')
博主在做用户注册发送激活邮件时,因邮件发送耗时、界面卡顿,想到用多线程发送异步邮件。实现后遇到应用上下文问题,查看官方文档解决。给出send_email.py完整代码,强调应用上下文app.app_context(),并说明在视图中调用send_mail(email, token)即可。
2352

被折叠的 条评论
为什么被折叠?



