首页 > 解决方案 > 用户登录网站时如何显示不同的导航栏

问题描述

我正在为我的项目创建一本食谱,并尝试在用户登录网站时切换 nabvar,以便它显示“食谱、添加食谱、注销”并隐藏“登录和注册链接”。我正在关注这个 youtube 视频https://www.youtube.com/watch?v=vVx1737auSE但是当我登录该网站时,导航没有改变。

导航:

  <div class="collapse navbar-collapse" id="navbarColor01">
<ul class="navbar-nav mr-auto">
  <li class="nav-item active">
  {% if session.user %}      
    <li class="nav-item">
        <a class="nav-link" href="{{ url_for('recipes')}}"> Recipes</a>
    </li>
    <li class="nav-item">
        <a class="nav-link" href="{{ url_for('add_recipe') }}" >Add Recipe</a>
    </li>
    <li class="nav-item">
        <a class="nav-link" href="{{ url_for('logout') }}" >Logout</a>
    </li>       
    {% else %}
  <li class="nav-item">
    <a class="nav-link" href="{{url_for('login')}}">Login</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" href="{{url_for('register')}}">Register</a>
  </li>   
   {% endif %}
  </li>   
</ul> 

应用程序.py

from flask import Flask, render_template, url_for, session, redirect, request, flash

import bcrypt


@app.route("/login", methods=["GET", "POST"])
def login():   
 if request.method == 'POST':
     users = mongo.db.users
     login_user = users.find_one({'name' : request.form['username']})
     if login_user:
         if bcrypt.hashpw(request.form['password'].encode('utf-8'), login_user['password']) == login_user['password']:
             session['username'] = request.form['username']
             flash('You have been successfully logged in!')
             return redirect(url_for('index'))        
     return 'Invalide username/password combination'
 return render_template('pages/login.html')

标签: pythonmongodbsessionflask

解决方案


当您将密钥添加username到调用路由的会话中时login,您需要签session.username入您的 jinja 模板。


推荐阅读