Flask Web 开发 用户认证_6

握草,终于进入用户认证的最终章节了,觉得作者不错,到了这里,已经开始让你尝试自己写代码了

虽然在github上面 Miguelgrinberg 也放上了代码,不过还是尽量自己写吧


首先是对于已经注册认证的用户,他们有时候想修改密码,那我们肯定要为用户专门放一个页面,用来修改密码

那无非是做一个表单和页面,通过表单来链接数据库修改最后的密码

以我们的经验,一般这样的表单有3行,老密码,新密码,确认新密码

所以如下(本来form和路由都自己编名字了。。。。后来发现到后面和书对照起来太麻烦了。。。还是老实点先按照书来做吧。。。。)

class ChangePasswordForm(Form):
 oldpassword=PasswordField('Oldpassword',validators=[Required()])                  
 newpassword=PasswordField('Newpassowrd',validators=[Required(),EqualTo('newpassword2',message='Password must match.')])
 newpassword2=PasswordField('Confirm password',validators=[Required()])
 submit = SubmitField('Register')


而对应的路由设置如下:

@auth.route('/change_password',methods=['GET','POST'])    #修改密码页面
@login_required                                                                       #保护路由,说明要求是在登录状态才能操作
def change_password():
 form = ChangePasswordForm()                                              
 if form.validate_on_submit():
  if current_user.verify_password(form.oldpassword.data):         #在表单提交有效的情况下,如果当前用户表单内输入的老密码验证返回结果是True
   current_user.password=form.newpassword.data                     #则当前用户的密码更新为表单里面的newpassword(这里用到的是password.setter装饰器)
   db.session(current_user)                                                          #提交更新
   db.session.commit()
   return redirect(url_for('main.index'))
  else:
   flash('Your oldpassword is wrong')                                            #不然的话,出现提示消息,老密码错误
 return render_template('auth/change_password.html',form = form)


这里需要注意的是:current_user实际上可以作为object来直接使用的,db.session.add(current_user)就可以显示这个作用


后端逻辑做完了,那前段页面也要做一个

{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% block title %}Flasky-Change Password{% endblock %}
{% block page_content %}
<div class="page-header">
 <h3>Please reset your password as below</h3>
</div>

{ {wtf.quick_form(form)}}                     #快速装饰表单
{% endblock %}



效果图如下:


需要注意的是,我们这里添加了一个change password的按钮,这个超链接最好还是放在base.html里面


这样我们的密码修改功能就完成了







--------------------------------------------------------------------------功能分割线-----------------------------------------------------------------------------------------------


但是有时候你忘记了密码,那你连改密码都改不了

所以就要用到忘记密码功能了,这个功能的作用基本上就是------>通过邮箱发送给你一个链接------->点击链接进入修改密码页面--------->设置新密码


对于我们平时的经验来说,一般是通过邮箱先认证一下,再修改密码

那这样,等于是要有2个页面产生,一个是让你输入邮箱并发送邮件的页面,第二个是你邮箱点击链接返回过来的页面,可以修改密码

而且,需要做2个表单,一个是输入邮箱并发送的表单,另外一个是修改密码的表单


先来看要输入email地址的表单类

class PasswordResetRequestForm(Form):
 email=StringField('Email Address',validators=[Required(),Length(1,64),Email()])
 submit = SubmitField('Send out')                              #提交表单以发送EMAIL


再来看修改密码的表单类

class

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值