修改 app/forms.py 脚本,新增申请重置密码表单。
2.3. 编写申请重置密码模板
新建 app/templates/login/reset_password_request.html 文件,编写申请重置密码模板。
2.4. 编写申请重置密码视图
修改 app/login.py 脚本,新增申请重置密码视图函数。其中,发送重置密码申请邮件的函数
send_password_reset_email() 会在下面有具体说明。
class ResetPasswordRequestForm(FlaskForm):
"""重置密码请求表单"""
email = StringField('邮箱', validators=[DataRequired(), Email()])
submit = SubmitField('请求密码重置')
{% extends 'base.html' %}
{% block content %}
<h1>重置密码</h1>
<form action="" method="post">
{{ form.hidden_tag() }}
<p>
{{ form.email.label }}<br>
{{ form.email(size=64) }}<br>
{% for error in form.email.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>
<p>{{ form.submit() }}</p>
</form>
{% endblock %}
class ResetPasswordRequestView(View):
"""重置密码申请视图"""
methods = ['GET', 'POST']
def dispatch_request(self):
if current_user.is_authenticated:
return redirect(url_for('index'))
form = ResetPasswordRequestForm()
if form.validate_on_submit():
user = User.query.filter_by(email=form.email.data).first()
if not user:
flash('该电子邮箱未注册')
return redirect(url_for('reset_password_request'))
send_password_reset_email(user)
flash('查看您的电子邮箱消息,以重置您的密码')
return redirect(url_for('login'))