Flask 入门系列教程(六)

简介: Flask 入门系列教程(六)

对于 Web 应用程序,往往需要有很多讯息及时的通知到用户,这种通知方式一般都是通过 Email 来实现的。比如用户的注册验证码、用户密码找回等功能,通过邮件来确认用户身份并发送相关信息,都是很好的选择。

而在 Flask 应用当中,我们可以选择 flask-mail 插件来把邮件功能很好的集成到我们的应用当中,安装和初始化都是我们熟悉命令和配置

安装:

pip install flask-mail

配置

from flask_mail import Mail
app = Flask(__name__)
...
mail = Mail(app)

配置 Flask-Mail

Flask-Mail 是通过连接 SMTP(Simple Mail Transfer Protocol,简单邮 件传输协议)服务器来发送邮件的,因此,在开始发送电子邮件前,我们 需要配置SMTP服务器。下面是 Flask-Mail 提供的一些常用配置

配置 默认值 说明
MAIL_SERVER 用于发送邮件的 SMTP 服务器 localhost
MAIL_PORT 发送端口 25
MAIL_USE_TLS 是否使用TLS False
MAIL_USE_SSL 是否使用SSL False
MAIL_USERNAME 发信服务器用户名 None
MAIL_PASSWORD 发信服务器密码 None

其中 TLS 和 SSL 都是用于加密的服务,可以有效的防止邮件在发送的过程中被第三方截获或篡改!

下面我们就在当前的程序当中,集成 Flask-Mail

集成邮件功能

这里要注意的一点,为了信息安全,我们千万不要把用户名和密码直接写到代码当中,而是尽量使用环境变量来代替

app.config['MAIL_SERVER'] = 'smtp.163.com'
app.config['MAIL_PORT'] = 465
app.config['MAIL_USE_SSL'] = True
app.config['MAIL_USERNAME'] = os.environ.get('MAIL_USERNAME')
app.config['MAIL_PASSWORD'] = os.environ.get('MAIL_PASSWORD')

同时还有注意,现在很多支持 SMTP 服务的服务商,在通过第三方登录的时候,都需要开启授权码,比如对于 163 邮箱,就是需要开启授权码的!

下面我们再编写一个专门用来发送邮件的函数 send_email

def send_email(to, subject, bogy):
     msg = Message(subject, sender=app.config['MAIL_USERNAME'], recipients=[to], body=bogy)
     mail.send(msg)

为了方便我们测试邮件是否能够正常发送,我们再编写一个测试邮件的页面,来发送测试邮件

class SendEmailForm(FlaskForm):
    emailAddress = StringField('Email Address', validators=[DataRequired()])
    message = TextAreaField()
    submit = SubmitField("Send")
@app.route('/sendemail', methods=['GET', 'POST'])
def sendemail():
    form = SendEmailForm()
    if form.validate_on_submit():
        eAddress = form.emailAddress.data
        message = form.message.data
        flash("Start Send Email!")
        send_email(eAddress, "My Email", message)
        return redirect(url_for('index'))
    return render_template('email.html', form=form)

再次创建一个表单用于发送测试邮件


这样,一个简单的验证页面就完成了!

异步发送邮件

细心的你可能已经发现了,当我们点击发送之后,会稍微停顿几秒,这是因为我们当时是同步发送邮件,也就是程序会等待邮件发送请求返回后,才执行后面的动作,为了避免这种类似无响应的情况,我们可以使用异步的方式来发送邮件。

我们可以为发送邮件这个功能开启一个新的线程,这样我们 Web 的主线程就不需要等待了

def send_async_email(app, msg):
    with app.app_context():
        mail.send(msg)
def send_email_saync(to, subject, body):
    msg = Message(subject, sender=app.config['MAIL_USERNAME'], recipients=[to], body=body)
    thr = Thread(target=send_async_email, args=[app, msg])
    thr.start()
    return thr

这里涉及到了多线程的操作,不熟悉的小伙伴可以先提前看看,对于不是很熟悉的小伙伴,也不用担心,我们后面还会再用到,再重点介绍学习!

这部分完整代码,可以检出6a

总结

到此为止,我们已经差不多完成了一个 Flask Web 应用的所需功能的概述,后面我们就可以来完成一个完整的项目了,一起进步吧!

相关文章
|
4月前
|
存储 安全 前端开发
Flask 入门系列教程(二)
Flask 入门系列教程(二)
|
2月前
|
人工智能 前端开发 算法
Python 潮流周刊#18:Flask、Streamlit、Polars 的学习教程
Python 潮流周刊#18:Flask、Streamlit、Polars 的学习教程
33 4
|
4月前
|
SQL 关系型数据库 Shell
Flask 入门系列教程(五)
Flask 入门系列教程(五)
|
4月前
|
安全 数据安全/隐私保护 Python
Flask 入门系列教程(四)
Flask 入门系列教程(四)
|
4月前
|
存储 前端开发 JavaScript
Flask 入门系列教程(三)
Flask 入门系列教程(三)
|
4月前
|
Web App开发 前端开发 JavaScript
Flask 入门系列教程(一)
Flask 入门系列教程(一)
|
5月前
|
API 数据库 网络架构
Python Flask框架学习教程
概述: 本教程将介绍Python Flask框架的基础知识和使用方法。Flask是一个简单而灵活的Web应用框架,它具有轻量级、易用性和高度可扩展等特点。通过学习本教程,您将能够了解Flask的基本概念、安装方法、语法结构、模板使用以及实际案例,并通过练习题加深对框架的理解和应用。
|
Python Windows Linux
Flask 教程 第一章:Hello, World!
本文转载自:https://www.jianshu.com/p/fcbd137f308b 一趟愉快的学习之旅即将开始,跟随它你将学会用Python和Flask来创建Web应用。上面的视频包含了整个教程的内容预览(译者注:视频见原文)。
1998 0
|
18天前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
【4月更文挑战第9天】本文对比了Python三大Web框架Django、Flask和Pyramid。Django功能全面,适合快速开发,但学习曲线较陡;Flask轻量灵活,易于入门,但默认配置简单,需自行添加功能;Pyramid兼顾灵活性和可扩展性,适合不同规模项目,但社区及资源相对较少。选择框架应考虑项目需求和开发者偏好。
|
7天前
|
API 数据库 数据安全/隐私保护
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】Django REST framework (DRF) 是用于构建Web API的强力工具,尤其适合Django应用。本文深入讨论DRF面试常见问题,包括视图、序列化、路由、权限控制、分页过滤排序及错误处理。同时,强调了易错点如序列化器验证、权限认证配置、API版本管理、性能优化和响应格式统一,并提供实战代码示例。了解这些知识点有助于在Python面试中展现优秀的Web服务开发能力。
22 1

相关实验场景

更多