登录之后更新导航
- 用上下文处理器app_context_processor定义函数
- 获取session中保存的值
- 返回字典
- 在父模板中更新导航,插入登录状态判断代码。
- 注意用{% ... %}表示指令。
- {{ }}表示变量
- 完成注销功能。
- 清除session
- 跳转
import config from flask import Flask,render_template,request,redirect,url_for,session from flask_sqlalchemy import SQLAlchemy 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) #db.create_all() @app.route('/') def first(): return render_template('first.html') @app.route('/sign_up/',methods=['GET','POST'])#登录 def sign_up(): if request.method == "GET": return render_template("sign_up.html") else: username = request.form.get("username") password = request.form.get("password") user = User.query.filter(User.username == username).first() if user: if user.password == password: session['user'] = username sessionpermanent = True return redirect(url_for('first')) else: return 'password error' else: return 'username is not existed' @app.route('/sign_in/',methods=['GET','POST'])#注册 def sign_in(): if request.method == "GET": return render_template("sign_in.html") else: username = request.form.get("username") password = request.form.get("password") user = User.query.filter(User.username == username).first() if user: return 'username existed.' else: user = User(username=username, password=password) db.session.add(user) db.session.commit() return redirect(url_for('first')) @app.context_processor def mycontext(): usern=session.get('user') if usern: return {'username':usern} else: return {} @app.route('/logout/') def logout(): session.clear() return render_template("first.html") @app.route('/chat/') def chat(): return render_template('chat.html') if __name__ == '__main__': app.run(debug=True)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{% block title %}{% endblock %}Hogwarts</title> <base target="_blank"> <link rel="stylesheet" type="text/css" href="{{ url_for('static',filename='css/base.css') }}"> <script src="{{ url_for('static',filename='js/base.js') }}"></script> {% block head %} {% endblock %} </head> <body class="body" id="myBody"> <div class="title"> <nav class="nav"> <img id="on_off" onclick="mySwitch()" src="{{ url_for('static',filename='image/bulboff.jpg') }}" width="40px"> <a href="{{ url_for('first') }}">首页</a> <a href="">校园新闻</a> <a href="{{ url_for('chat') }}">讨论交流</a> <a href="">格兰芬多</a> <a href="">赫奇帕奇</a> <a href="">拉文克劳</a> <a href="">斯莱特林</a> <input type="text"name="search"> <button type="submit">搜索</button> {% if username %} [<a href="#"id="aaa">{{ username }}</a>·<a href="{{ url_for("logout") }}">注销</a>] {% else %} [<a href="{{ url_for("sign_up") }}">登录</a>·<a href="{{ url_for("sign_in") }}">注册</a>] {% endif %} </nav> <h1>霍格沃兹论坛</h1> <h2>Hogwarts'BBS</h2> </div> {% block main %} {% endblock %} <div id="bottom"> <a href="">联系我们</a> <a href="">加入我们</a> <a href="">校长室</a> <a href="">帮助中心</a> <a href="">合作伙伴</a> </div> <div class="copyright"> <p>Copyright © 2017. Created by <a href="#" target="_blank">Judy_L</a></p> </div> </body> </html>
登录:

注销:


浙公网安备 33010602011771号