登录之后更新导航

  1. 用上下文处理器app_context_processor定义函数
    1. 获取session中保存的值
    2. 返回字典
  2. 在父模板中更新导航,插入登录状态判断代码。
    1. 注意用{% ... %}表示指令。
    2. {{ }}表示变量
  3. 完成注销功能。
    1. 清除session
    2. 跳转

 

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 &copy; 2017. Created by <a href="#" target="_blank">Judy_L</a></p>
</div>

</body> </html>

 

登录:

 

注销:

 

posted @ 2017-11-24 21:53  011赖颖璇  阅读(129)  评论(0)    收藏  举报