登录之后更新导航
- 用上下文处理器app_context_processor定义函数
- 获取session中保存的值
- 返回字典
- 在父模板中更新导航,插入登录状态判断代码。
- 注意用{% ... %}表示指令。
- {{ }}表示变量
- 完成注销功能。
- 清除session
- 跳转
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')}}">首页 </a> <a class="one" href="{{url_for('question')}}">发布问题 </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 %}
![]()
![]()



浙公网安备 33010602011771号