登录之后更新导航
- 用上下文处理器app_context_processor定义函数
- 获取session中保存的值
- 返回字典
- 在父模板中更新导航,插入登录状态判断代码。
- 注意用{% ... %}表示指令。
- {{ }}表示变量
- 完成注销功能。
- 清除session
- 跳转
py文件
from flask import Flask, render_template, request, redirect, url_for,session 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) Telphone = db.Column(db.String(20), nullable=True) # db.create_all() @app.route('/') def index(): return render_template('index.html') @app.route('/login/', methods=['GET', 'POST']) def login(): if request.method == 'GET': return render_template('login.html') else: usern = request.form.get('Username') passn = request.form.get('Password') user = User.query.filter(User.Username == usern).first() if user: if user.Password == passn: session['user'] = usern return redirect(url_for('index')) else: return '密码错误' # return window.alert("密码错误") else: # return window.alert("用户名不存在") return '用户名不存在' @app.context_processor def mycontext(): usern=session.get('user') if usern: return {'Username':usern} else: return {} # def login_re(func): # @wraps(func) # def wrapper(*args:**kwargs): @app.route('/logout/') def logout(): session.clear() return redirect(url_for("index")) @app.route('/register/', methods=['GET', 'POST']) def register(): if request.method == 'GET': return render_template('register.html') else: usern = request.form.get('Username') passn = request.form.get('Password') teln = request.form.get('Telphone') user = User.query.filter(User.Username == usern).first() if user: return '用户名已经存在' else: user1 = User(Username=usern, Password=passn, Telphone=teln) db.session.add(user1) db.session.commit() return redirect(url_for('login')) @app.route('/question/') def question(): return render_template('question.html') if __name__ == '__main__': app.run(debug=True)
base.html
<!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 rel="stylesheet" type="text/css" href="{{ url_for('static',filename='css/base.css') }}"> {% block head %}{% endblock %} </head> <body id="myBody"> <nav class="daohang"> <div class="daohang_box"> <a class="shouye" href="{{ url_for('index') }}">首页</a> <input id="search_box" type="text" placeholder="请输入关键词查找"> <button id="search" type="submit">搜索</button> <a class="xiaoqu3" href="{{ url_for('question') }}">发布问答</a> <img id="on_off" onclick="mySwitch()" src="{{ url_for('static',filename='images/bulbon.png') }}" > {% if Username %} <a class="xiaoqu1" href="#">{{Username }}</a> <a class="xiaoqu2" href="{{ url_for('logout') }}">注销</a> {% else %} <a class="xiaoqu1" href="{{ url_for('login') }}">登录</a> <a class="xiaoqu2" href="{{ url_for('register') }}">注册</a> {% endif %} </div> </nav> <br><br> <!-- 要加的代码,主页部分区别于登录注册界面--> {% block main %}{% endblock %} <footer class="foot"> <div class="foot_box"> <a>诺心公告</a> <a>关于诺心</a> <a>联系我们</a> <a>客服服务</a> <a>食品经营许可证</a> <a>生产许可证</a> <a>上海工商</a> <h2>欢迎前来订购蛋糕</h2> </div> </footer> </body> </html>
注销