登录之后更新导航

 

1用上下文处理器app_context_processor定义函数

  1. 获取session中保存的值
  2. 返回字典
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)

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')
passw = request.form.get('password')
user = User.query.filter(User.username == usern,User.password==passw).first()
if user:
session['user']=usern
session.permanent=True
return redirect(url_for('index'))
else:
return u'error username or password'

@app.route('/regist/',methods=['get','post'])
def regist():
if request.method=='GET':
return render_template('regist.html')
else:
usern=request.form.get('username')
passw =request.form.get('password')
user=User.query.filter(User.username==usern).first()
if user:
return u'username existed'
else:
user1=User(username=usern,password=passw)
db.session.add(user1)
db.session.commit()
return redirect(url_for('login'))

@app.route('/logout/')
def logout():
session.clear()
return redirect(url_for('index'))

@app.context_processor
def context():
username = session.get('user')
if username:
return {'username':username}
else:
return()

if __name__ == '__main__':
app.run(debug=True)

2.在父模板中更新导航,插入登录状态判断代码。

  1. 注意用{% ... %}表示指令。
  2. {{ }}表示变量

3.完成注销功能。

  1. 清除session
  2. 跳转
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>
        首页
        {% block denglutitle %}{% endblock %}
    {% block zhucetitle %}{% endblock %}
    {% block tupiantitle %}{% endblock %}
    </title>
    <link rel="stylesheet" href="{{ url_for('static',filename='base.css') }}">

    <script src="{{ url_for('static',filename='base.js') }}"></script>
{% block dengluhead %}{% endblock %}
{% block zhucehead %}{% endblock %}
{% block tupianhead %}{% endblock %}
</head>
<body id="mybody">

<nav class="navbar navbar-inverse" role="navigation">
    <div class="container-fluid">
        <div class="navbar-header">
            <a class="navbar-brand" href="{{ url_for('index') }}">首页</a>
        </div>
        <div>

            <ul class="nav navbar-nav">
                <li><a href="{{ url_for('fabu') }}" onclick="">发布</a></li>
            </ul>
        </div>
        <div>
            <input type="text" name="user" id="user" placeholder="请输入内容">
            <input type="button" value="search" class="btn btn-success" onclick="">
        </div>
        <div>
            <ul class="nav navbar-nav">


                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">
                        set<b class="caret"></b>
                    </a>
                    <ul class="dropdown-menu">
                        <li><a href="#">favourites</a></li>
                        <li><a href="#">share</a></li>
                        <li><a href="#">search</a></li>
                        <li class="divider"></li>
                        <li><a href="#">good</a></li>
                    </ul>
                </li>
                <li><a href="#">||</a></li>

                {% if username %}
                    <li><a href="#" onclick="">{{ username }}</a></li>
                    <li><a href="{{ url_for('logout') }}" onclick="">logout</a></li>
                {% else %}
                    <li><a href="{{ url_for('login') }}" onclick="">login</a></li>
                    <li><a href="{{ url_for('zhuce') }}" onclick="">regist</a></li>
                {% endif %}

            </ul>
        </div>
        <div style="float: left">
            <img id="myonoff" onclick="mySwitch()" src="http://www.runoob.com/images/pic_bulbon.gif" style="width:50px" >
        </div>

    </div>


</nav>

 

posted on 2017-11-24 18:01  lishanting  阅读(153)  评论(0)    收藏  举报