登录之后更新导航

  1. 用上下文处理器app_context_processor定义函数
    1. 获取session中保存的值
    2. 返回字典
  2. 在父模板中更新导航,插入登录状态判断代码。
    1. 注意用{% ... %}表示指令。
    2. {{ }}表示变量
  3. 完成注销功能。
    1. 清除session
    2. 跳转
      from flask import Flask,redirect,request,url_for,session
      from flask import render_template
      from flask_sqlalchemy import SQLAlchemy
      import config
      
      app = Flask(__name__)
      app.config.from_object(config)
      db=SQLAlchemy(app)
      
      class User(db.Model):
          __tablename__='user'
          id=db.Column(db.Integer,primary_key=True,autoincrement=True)
          username=db.Column(db.String(20),nullable=False)
          password = db.Column(db.String(20), nullable=False)
          nickname=db.Column(db.String(20))
      
      # db.create_all()
      #查询
      # user=User.query.filter(User.username=='mis1234').first()
      # print(user.id,user.username,user.password)
      
      #增加
      # user=User(username='mis1234',password='111111',nickname='l')
      # db.session.add(user)
      # db.session.commit()
      
      #增加
      # user=User(username='luk',password='123456',nickname='lu')
      # db.session.add(user)
      # db.session.commit()
      # 修改
      # user=User.query.filter(User.username=='mis1234').first()
      # user.password='12345678'
      # db.session.commit()
      #
      # # 删除
      # user=User.query.filter(User.username=='mis1234').first()
      # db.session.delete(user)
      # db.session.commit()
      
      
      @app.route('/')
      def base():
          return render_template('base.html')
      
      
      @app.route('/login/',methods=['GET','POST'])
      def login():
          if request.method == 'GET':
              return render_template('login.html')
          else:
              usern = request.form.get('username')
              passw = request.form.get('password')
              user = User.query.filter(User.username == usern).first()
              if user:
                  if user.password==passw:
                      session['user']=usern
                      return redirect(url_for('shouye'))
                  else:
                       return '密码错误。'
              else:
                  return  '用户名不存在。'
      
      @app.route('/register/',methods=['GET','POST'])
      def register():
          if request.method=='GET':
              return render_template('register.html')
          else:
              usern=request.form.get('username')
              nickn = request.form.get('nickname')
              passw = request.form.get('password')
              user=User.query.filter(User.username==usern).first()
              if user:
                  return '用户名已存在。'
              else:
                  user1=User(username=usern,password=passw,nickname=nickn)
                  db.session.add(user1)
                  db.session.commit()
                  return redirect(url_for('login'))#重定回向登录页面
      
      
      @app.context_processor
      def mycontext():
          usern=session.get('user')
          if usern:
              return {'username':usern}
          else:
              return {}
      
      @app.route('/logout/')
      def logout():
          session.clear()
          return redirect(url_for('shouye'))
      
      @app.route('/question/')
      def question():
          return render_template('question.html')
      
      @app.route('/shouye/')
      def shouye():
          return render_template('shouye.html')
      
      if __name__ == '__main__':
          app.run(debug=True)
      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <title>{% block title%}父模板{% endblock %}</title>
          <script src="{{url_for('static',filename='js/base.js') }}" type="text/javascript"></script>
          <link href="{{ url_for('static' ,filename='css/base.css') }}"  rel="stylesheet" type="text/css">
          {% block head %}
          {% endblock %}
      </head>
      <body id="myBody">
      <nav>
      <div class="container">
         <form>
          <img id="images" src="{{ url_for('static',filename='images/flower.jpg') }}" alt="fl" width="50">
          <a class="one" href="{{url_for('shouye')}}">首页&nbsp;&nbsp;</a>
          <a class="one" href="{{url_for('question')}}">发布问题&nbsp;&nbsp;</a>
          <input id="keyword" type="text" name="search" placeholder="请输入关键字">
          <input type="submit" value="搜索">
             {% if username %}
                 <a class="login" href="#">{{ username }}</a>
                 <a class="register" href="{{url_for('logout')}}">注销</a>
             {% else %}
                 <a class="login" href="{{url_for('login')}}">登录</a>
                 <a class="register" href="{{url_for('register')}}">注册</a>
             {% endif %}
      
          <img id="on_off" onclick="mySwitch()" src="../static/images/bulbon.gif">
              </form>
      </div>
      </nav>
      {% block main %}
      <footer>
          <div class="footer_box">
               Copyright@ 2017-2022 个人版权,版权所有
           </div>
       </footer>
      {% endblock %}

                        

posted on 2017-11-24 11:40  087陆倩霞  阅读(219)  评论(0)    收藏  举报