目前咱们的demo
已经完成了注册和登陆功能,当登陆成功以后,页面跳转到首页,此时咱们须要保存用户的登陆状态,无论页面如何跳转,除非用户本身注销登陆。html
如以前所说,咱们能够用session
来保存用户登陆的这个状态,当登陆验证成功的时候,将当前登陆的username
存入session
,并设置session
的permanent
属性为True
(这样下次打开浏览器仍然是登陆的状态),这一步很简单,login
函数修改以下:segmentfault
@app.route('/login/', methods=['GET', 'POST']) def login(): #...省略... if '成功' in message: session['username'] = username session.permanent = True return redirect(url_for('home')) #...省略...
登陆成功以后,发现导航条右边的文字仍是这个鬼样子:浏览器
咱们须要修改它,设计成登陆成功以后,这一部分显示用户名和注销按钮。用 9.注册和登陆功能实现(2)—— 注册与登陆的错误提示 提到的@app.context_processor
上下文管理器,把当期登陆的用户名传递给html
:session
@app.context_processor def my_context_processor(): user = session.get('username') if user: return {'login_user': user} return {}
而后在base.html
中修改导航条原先登陆和注册的部分以下:app
{% if login_user %} <li><a href="#">用户:{{ login_user }}</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 %}
此时,登陆成功后,导航条就变成以下样式了:函数
上面的代码,咱们把注销关联到了一个logout
视图函数,这个也很好写,用session
的clear
方法清除session
中的内容,而后跳转回首页:url
@app.route('/logout/') def logout(): session.clear() return redirect(url_for('home'))
用户名的那部分,咱们后续设计一个能够更改头像和修改密码的页面,点击用户名跳转过去,这里就先写一个#
。spa