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

相關文章
相關標籤/搜索