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类,如果和他的默认配置不同,复写他的方法即可

image.png

models/user.py

flask-login模块也需要在app中进行注册,注册方法同SQLALChemy app/__init__.py

Last updated

Was this helpful?