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

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)


#db.create_all()
# # 增加
# user = User(username = 'zhuyinyin',password='113428164508')
# db.session.add(user)
# db.session.commit()
# 修改
# ser=User.query.filter(User.username =='zhuyinyin').first()
# user.password='123'
# print(user.username,user.password)
# db.session.commit()
#查询:
# User.query.filter(User.username == 'zhuyinyin').first()
# print(user.username,user.password)

# db.session.commit()
# 修改:
# user.password = '111111'
# db.session.commit()

# 删除:
# db.session.delete(user)
# db.session.commit()


@app.route('/')
def hello_world():
    return render_template('ba.html')
@app.route('/zhuce/',methods=['GET','POST'])
def zhuce():
    if request.method == 'GET':
        return render_template('zhuce.html')
    else:
        username = request.form.get('username')  # 获取form中的数据
        password = request.form.get('password')  # 获取form中的数据
        # email = request.form.get('email')  # 获取form中的数据
        user = User.query.filter(User.username ==username).first()
        if user:
            return'用户已存在'
        else:
            user = User(username = username,password=password)
            db.session.add(user)
            db.session.commit()
            return redirect(url_for('denglu'))

# @app.route('/denglu/',methods=['GET','POST'])
# def denglu():
#     if request.method=='GET':
#         return render_template('denglu.html')
#     else:
#         username=request.form.get('username')
#         password=request.form.get('password')
#         user=User.query.filter(User.username==username,User.password==password).first()
#         #判断用户名是否存在
#         if user:
#             if user.password==password:
#                 return redirect(url_for('shouye'))
#             else:
#                 return '密码错误'
#         else:
#             return '用户不存在'

#第二种写法
@app.route('/denglu/',methods=['GET','POST'])
def denglu():
    if request.method=='GET':
        return render_template('denglu.html')
    else:
        username = request.form.get('username')
        password = request.form.get('password')

        user=User.query.filter(User.username==username).first()
        #判断用户名是否存在
        if user:
            session['user']=username
            session.permanent=True
            if user.password==password:
                return redirect(url_for('shouye'))
            else:
                return '密码错误'
        else:
            return '此用户不存在'

@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('shouye'))

@app.route('/shouye/')
def shouye():
    return render_template('shouye.html')
@app.route('/wenda/')
def wenda():
    return render_template('wenda.html')

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

父模板代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>
        {% block title %}
        {% endblock %}
        导航栏</title>
    <link rel="stylesheet" href="{{ url_for('static',filename='css/base.css') }}">
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
    <script src="{{ url_for('static',filename='js/base.js') }}"></script>

    <nav class="navbar navbar-default" role="navigation">
        <div class="container-fluid">
            <div class="navbar-header">
                <a class="navbar-brand" href="#">广州商学院</a>

            </div>
            <form class="navbar-form navbar-left" role="search">
                <div class="form-group"><input type="text" class="form-control" placeholder="输入您感兴趣的"></div>
                <button type="submit" class="btn btn-default" style="width: 70px">查询</button>
            </form>
            <ul class="nav navbar-nav navbar-right" id="myBody">
                <li><img src="{{ url_for('static',filename='css/123.jpg') }}" alt="" width="40px"></li>
                <li><a href="{{ url_for('shouye') }}">校园首页</a></li>
                <li><a href="#">校园新闻</a></li>
                <li><a href="{{ url_for('wenda') }}">问答平台</a></li>
                <li style="margin-top: 1.8%"><img id="myOnOff" onclick="mySwitch()"
                                                  src="http://www.runoob.com/images/pic_bulbon.gif" width="18px">夜间模式
                </li>
                {% if username %}
                    <li><a href="#">{{ username }}</a></li>
                    <li><a href='{{ url_for('logout') }}'>注销</a></li>
                {% else %}
                    <li><a href="{{ url_for('zhuce') }}"><span class="glyphicon glyphicon-user"></span> 注册</a></li>
                    <li><a href="{{ url_for('denglu') }}"><span class="glyphicon glyphicon-log-in"></span> 登录</a></li>
                {% endif %}

                <li>
                    <select style="margin-top: 18%">
                        <option style="width: 100px">个人中心</option>
                        <option>收藏</option>
                        <option>点赞</option>
                        <option>评论</option>
                    </select></li>
                <li><a href="#"><span class=""></span> 退出</a></li>
            </ul>
        </div>
    </nav>
</head>
<body id="myBody"
      style="background-image:url(https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1509736823780&di=ae2cf40eb448c691380cda401a29628a&imgtype=0&src=http%3A%2F%2Fimage.kuakao.com%2F2015%2F1120%2F20151120105350738.jpg)">

{% block main %}{% endblock %}

<footer>
    <div class="foot">
        <div><a href="#"> 联系我们</a> · <a href="#"> 加入我们</a> · <a href="#"> 品牌与徽标 </a> · <a href="#">帮助中心</a> · <a
                href="#">合作伙伴</a></div>
        <div>©2015-2017 电话:020-66666666</div>
        <div>©2015-2017 地址0000000</div>
        <div>©2015-2017 邮箱:020-66666666</div>
    </div>
</footer>
</body>
<nav class="navbar navbar-default navbar-fixed-bottom" role="navigation">
    <div class="container-fluid">
        <div class="navbar-header">
            <a class="navbar-brand" href="#">广商美景集</a>
        </div>
        <div>
            <ul class="nav navbar-nav">
                <li class="active"><a href="#">日景</a></li>
                <li class="active"><a href="#">晚景</a></li>
                <li class="active"><a href=""><img
                        src="http://img17.3lian.com/d/file/201703/03/0840bd7fcb29a3dca53723e66c7d11ee.jpg"
                        style="width: 150px"></a>
                    <div class="desc"><a href="">全景</a></div>
                </li>
                <li class="active"><a href=""><img src="http://img1.3lian.com/2015/a1/137/d/37.jpg"
                                                   style="width: 150px"></a>
                    <div class="desc"><a href="">春天</a></div>
                </li>
                <li class="active"><a href=""><img
                        src="http://img17.3lian.com/201612/21/6310c81f8385d0e991b5336805695b50.jpg"
                        style="width: 150px"></a>
                    <div class="desc"><a href="">夏天</a></div>
                </li>
                <li class="active"><a href=""><img src="http://img1.3lian.com/2015/a1/136/d/200.jpg"
                                                   style="width:150px"></a>
                    <div class="desc"><a href="">秋天</a></div>
                </li>
                <li class="active"><a href=""><img src="http://img1.3lian.com/2015/a1/137/d/37.jpg"
                                                   style="width: 150px"></a>
                    <div class="desc"><a href="">冬天</a></div>
                </li>
                <li class="active"><a href=""><img src="http://f12.baidu.com/it/u=166738647,1428225560&fm=72"
                                                   style="width: 150px"></a>
                    <div class="desc"><a href="">夜景</a></div>
                </li>
            </ul>
        </div>
    </div>
</nav>

</html>

首页代码如下:

{% extends 'ba.html' %}
{% block title %}
首页
{% endblock %}
{% block main %}
     <link rel="stylesheet" type="text/css" href="../static/css/wenda.css">
    <p>{{ username }}我的注册页面</p>
    <div class="box">
        <div id="tittle"><h2 align="center">反馈</h2></div>
<div>
    <label for="questionDetail">首页</label><br>
<textarea class="form-control" id="questionDetail" rows="10" style="width: 500px"></textarea><br>
</div>
          <div id="error_box"><br></div>
    <div class="input_button"><button onclick="foLogin()">提交</button></div>
    </div>
{% endblock %}

 

posted on 2017-11-24 09:53  朱茵茵  阅读(172)  评论(0编辑  收藏  举报