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.注销功能

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

这里写图片描述

这里写图片描述

主py文件中添加如下代码

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

然后更改base.html,更改后如下,当时出错的原因是<li><a href="{{url_for('logout')}}">注销</a></li> 这句出错了,导向了login函数,应该是logout函数才对,因为logout才把session清除了,也就是说删除了当前用户的登录状态

 <ul class="nav navbar-nav navbar-right">
          {% if user%}
                <li><a href="#">{{user.username}}</a></li>
                <!-- 之前这里url_for倒错了位置,原先成了login -->
                <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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值