使用 Python 从 0 开发属于你的个人管理系统 13 篇 | 登录流程从前端到后端的实现

通过前面的学习,你已经知道了 Flask 中对 Form 表单的使用,也知道了数据库创建用户表,以及使用了命令进行了用户的注册和登录校验,那么如何将它们应用到项目中去呢?也就是说,从前端的页面到后端的整个流程的实现是怎么样的?

接下来跟着小帅b一起实现起来吧。

前端登录校验

在路由中我们定义了页面的渲染:

@app.route('/login', methods=['GET'])
def login():
    return render_template('login.html', form=login_form)

现在将你的项目运行起来,访问 login 路由,呈现的是这个登录页面:

现在它是静态的,什么都没有实现。

在前端用户点击登录的时候,请求前我们希望它会先进行一些验证,比如用户名密码不能为空,密码不能少于 5 个长度。

所以你可以定义一个 Form :

class LoginForm(FlaskForm):
    username = StringField('username', validators=[DataRequired()])
    password = PasswordField('password', validators=[DataRequired(), Length(5, 100)])
    remember_pwd = BooleanField('remember_pwd')
    login = SubmitField('login')

在 HTML 中绑定相关参数就可以了,具体可以看前面的介绍

后台登录校验

在 HTML 的 form 中,可以定义请求的路径:

<form class="user" action="/userlogin" method="post">

这样我们就可以在 userlogin 方法中做登录的校验操作了。

@app.route('/userlogin', methods=['POST'])
def userlogin():
    login_form = LoginForm()
    if login_form.validate_on_submit():
        # 获取传过来的表单数据进行数据校验
        ....
        ....
        return render_template('index.html', title='个人管理系统')
    return render_template('login.html', form=login_form)

login_form.validate_on_submit 判断前端校验,如果通过我们就可以对传来的数据进行校验。

获取传过来的账号密码:

本文隐藏内容 登陆 后才可以浏览
刚刚我们在用户登录成功的时候将用户的 id 添加到 session,那么登出的时候只需要将 id 移除掉就可以了。

在 index.html 中,将 a 标签定义为调用 logout 方法:

<div class="modal-footer">
     <button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button>
     <a class="btn btn-primary" href="{{ url_for('logout') }}" >Logout</a>
</div>

接着在路由中,我们可以定义 logout 方法,将 session 中的 id 移除,然后跳转到登录页面:

@app.route('/logout', methods=['GET'])
def logout():
    del session['user_id']
    return redirect(url_for('login'))

OK,那么到现在我们的整个登录的流程就实现了:

那么对于一些方法的请求,在请求前,有些方法是可以直接被访问,有些方法是需要登录了才访问,如何才能做好这一点验证呢?你可以想想我们之前讲过的装饰器。

我们下篇继续,peace!

发表回复