11.保存登陆状态与注销功能

目前咱们的demo已经完成了注册和登陆功能,当登陆成功以后,页面跳转到首页,此时咱们须要保存用户的登陆状态,无论页面如何跳转,除非用户本身注销登陆。html


如以前所说,咱们能够用session来保存用户登陆的这个状态,当登陆验证成功的时候,将当前登陆的username存入session,并设置sessionpermanent属性为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'))
    #...省略...

登陆成功以后,发现导航条右边的文字仍是这个鬼样子:浏览器

clipboard.png

咱们须要修改它,设计成登陆成功以后,这一部分显示用户名和注销按钮。用 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 %}

此时,登陆成功后,导航条就变成以下样式了:函数

clipboard.png

上面的代码,咱们把注销关联到了一个logout视图函数,这个也很好写,用sessionclear方法清除session中的内容,而后跳转回首页:url

@app.route('/logout/')
def logout():
    session.clear()
    return redirect(url_for('home'))

用户名的那部分,咱们后续设计一个能够更改头像和修改密码的页面,点击用户名跳转过去,这里就先写一个#spa

相关文章
相关标签/搜索