Flask实战2问答平台-完成登录注册功能

本来可以提前完成这篇的,结果测试时发现了一些问题,稍后将会提到.
上篇中我们已经完成了登录注册的界面,现在具体完成其具体功能.

1.注册功能

因为注册成功后,才能登录,我们在主py文件中添加如下

@app.route('/register',methods = ['GET','POST'])
def register():
    if request.method == 'GET':
        return render_template('register.html')
    else:
        #request.form.get()获取用户表单输入,通过name
        telephone = request.form.get('telephone')
        username = request.form.get('username')
        password1 = request.form.get('password1')
        password2 = request.form.get('password2')
        #查询数据库中手机号码是否已经存在
        user = User.query.filter(User.telephone == telephone).first()
        if user:
            return '该手机号已被注册,请更换手机号码'
            # flash('该手机号已被注册,请更换手机号码')
            # return render_template('register.html')
        else:
            #如果用户两次密码不一致,则进行提醒
            if password1 != password2:
                return '两次密码不相等,请核对后再填写'
            else:
                #在数据库中添加注册的数据
                user = User(telephone = telephone,username = username,password = password1)
                db.session.add(user)
                db.session.commit()
                return redirect(url_for('login'))

2.登录功能

同样在主py文件中添加

@app.route('/login',methods = ['GET','POST'])
def login():
    if request.method == 'GET':
        return render_template('login.html')
    else:
        telephone = request.form.get('telephone')
        password = request.form.get('password')
        user = User.query.filter(User.telephone == telephone,User.password == password).first()
        if user:
            session['user_id'] = user.id 
            #如果需要31天内不需要登录,则进行如下一行设置
            session.permanent = True
            return redirect(url_for('index'))
        else:
            return '手机号码或者密码错误,请确认后再登录'

3.注销功能

注销需要实现的是一下两图中的切换

Flask实战2问答平台-完成登录注册功能_第1张图片

Flask实战2问答平台-完成登录注册功能_第2张图片

主py文件中添加如下代码

@app.route('/logout')
def logout():
    #session.pop['user_id'] 或者
    del session['user_id']# 或者
    # session.clear()
    return redirect(url_for('login'))

然后更改base.html,更改后如下,当时出错的原因是

  • 注销
  • 这句出错了,导向了login函数,应该是logout函数才对,因为logout才把session清除了,也就是说删除了当前用户的登录状态

     <ul class="nav navbar-nav navbar-right">
              {% if user%}
                    <li><a href="#">{{user.username}}a>li>
                    
                    <li><a href="{{url_for('logout')}}">注销a>li>
               {% else %}
                    <li><a href="{{url_for('login')}}">登录a>li>
                    <li><a href="{{url_for('register')}}">注册a>li>
              {% endif %}
          ul>

    你可能感兴趣的:(Python,Web)