目前咱們的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