8.5 用户登录
接受用户传来的参数并进行参数校验
使用email查询数据库并验证密码是否正确,密码的加密校验应该放在User模型类里,这样可以使得封装性更好,外部调用更加方便
email和密码校验未通过,则通过消息闪现通知客户端消息
email和密码校验通过,则通过flask提供的插件flask_login(http://www.pythondoc.com/flask-login/) 将数据写入cookie
web/auth.py
...
...
@web.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm(request.form)
if request.method == 'POST' and form.validate():
user = User.query.filter_by(email=form.email).first()
if user and user.check_password(user.password):
# 使用flask-login 的 login_user间接写入cookie
# 默认是暂时的cookie,关闭浏览器后cookie消失,如果想改成长期的需要传入关键字参数remember
login_user(user, remember=True)
else:
flash("账号不存在或者密码错误")
return render_template('auth/login.html', form=form)
@web.route('/logout')
def logout():
logout_user()
return redirect(url_for('web.index'))
...
...login_user方法并不是把user内的搜索属性全都写入cookie,login_user需要我们为user类定义几个方法,如get_id用来获取id。如果我们把他定义的方法全都编写出来,太多了,我们可以集成他提供给我们的UserMixin类,如果和他的默认配置不同,复写他的方法即可

models/user.py
flask-login模块也需要在app中进行注册,注册方法同SQLALChemy app/__init__.py
Last updated
Was this helpful?