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