登录之后更新导航

  1. 用上下文处理器app_context_processor定义函数
    1. 获取session中保存的值
    2. 返回字典
  2. 在父模板中更新导航,插入登录状态判断代码。
    1. 注意用{% ... %}表示指令。
    2. {{ }}表示变量
  3. 完成注销功能。
    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 base():
    return render_template('base.html')

@app.route('/base2')
def base2():
    return render_template('base2.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("base2"))
            else:
                return u'用户密码错误!'
        else:
            return u'用户不存在!'


@app.route('/res/',methods=['GET','POST'])
def res():
    if request.method =='GET':
        return  render_template('res.html')
    else:
        usern = request.form.get('name')
        passw = request.form.get('password')
        user = User.query.filter(User.username==usern).first()
        if user:
            return 'username existed'
        else:
            user= User(username=usern,password=passw)
            db.session.add(user)
            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('base'))

if __name__ == '__main__':
    app.run(debug=True)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title %}NEWS & JIANSHU{% endblock %}</title>

{% block head %}{% endblock %}

</head>
<body class="bg11">

<nav>

    <a class="logo" href="http://www.jianshu.com/">
        <img src="http://cdn2.jianshu.io/assets/web/logo-58fd04f6f0de908401aa561cda6a0688.png" alt="Logo"></a>
    <a href="http://127.0.0.1:5000/base2">首页</a>

      {% if username %}
      <a href="#">{{ username }}</a>
      <a href="{{ url_for('logout') }}">注销</a>
      {% else %}
      <a href="{{ url_for('login') }}">登陆</a>
      <a href="{{ url_for('res') }}">注册</a>
      {% endif %}

    <input type="text"name="search">
    <button type="submit">搜索</button>

</nav>

<hr>

{% block main %}{% endblock %}
</body>
</html>

 

posted @ 2017-11-24 11:46  杜丽晖  阅读(123)  评论(0编辑  收藏  举报