美文网首页
03-06flask蓝图、jinja2

03-06flask蓝图、jinja2

作者: 生命的怒放 | 来源:发表于2019-03-06 17:39 被阅读0次

    hello.py 启动页面。

    # hello.py 启动页面。
    
    import redis
    from flask import Flask
    from flask_script import Manager
    from flask_session import Session
    
    from app.views import blue     # 导入app文件夹下views.py文件中的blue变量
    app = Flask(__name__)
    # 第二步: 管理蓝图
    app.register_blueprint(blueprint=blue)    # =blue是上面导入的那个
    
    # 加密,加密复杂程度和设值有关
    app.secret_key = '1234567890'
    # 配置session信息
    # from flask_session import Session
    app.config['SESSION_TYPE'] = 'redis'
    app.config['SESSION_REDIS'] = redis.Redis(host='127.0.0.1', port=6379)
    Session(app)
    
    manage = Manager(app)
    
    if __name__ == '__main__':
        # app.run()
        manage.run()
    

    views.py 内容页面

    #  views.py  内容页面
    from flask import render_template, make_response, \
        request, session, Blueprint, redirect, \
        url_for
    
    from utils.functions import is_login  
    
    # 蓝图,管理路由地址
    # 第一步: 生成蓝图对象
    blue = Blueprint('first', __name__)
    
    @blue.route('/')
    def hello():
        return 'hello world'
    
    @blue.route('/make_res/')
    def make_res():
        # make_response('响应内容', 响应状态码)创建响应对象
        # return make_response('hello flask day02', 200)
        # return make_response('<h2>今天天气不好</h2>')
        index = render_template('index.html')
        return make_response(index, 200)
    
    @blue.route('/register/', methods=['GET', 'POST'])
    def register():
        print(request.method)
        if request.method == 'GET':
            return render_template('register.html')
        if request.method == 'POST':
            # 模拟注册功能
            # 1. 获取页面中传递的参数
            username = request.form.get('username')
            password = request.form.get('password')
            password2 = request.form.get('password2')
            # 模拟注册
            if username == 'coco' and password == password2 \
               and password == '123456':
                # 返回登录页面
                return redirect(url_for('first.login'))
                # return render_template('login.html')
            else:
                return render_template('register.html')
    
    @blue.route('/login/', methods=['GET', 'POST'])
    def login():
        if request.method == 'GET':
            return render_template('login.html')
    
        if request.method == 'POST':
            # 1.获取参数
            username = request.form.get('username')
            password = request.form.get('password')
            # 2.模拟登陆
            if username == 'coco' and password == '123456':
                # 向cookie中设置参数
                res = make_response(render_template('index.html'))
                # 设置cookie
                res.set_cookie('token', '12345678', max_age=3000)
                return res
            else:
                return render_template('login.html')
    
    @blue.route('/logout/')
    def my_logout():
        # 注销
        res = make_response(render_template('login.html'))
        res.delete_cookie('token')
        return res
    
    @blue.route('/index/')
    def index():
        # 登陆过后能看到index.html页面, 没有登录跳转到登录页面
        token = request.cookies.get('token')
        if token == '12345678':
            # 判断登陆成功了
            return render_template('index.html')
        else:
            # 判断登陆失败了
            return render_template('login.html')
    
    @blue.route('/session_login/', methods=['GET', 'POST'])
    def session_login():
        if request.method == 'GET':
            return render_template('session_login.html')
    
        if request.method == 'POST':
            # 解析参数
            username = request.form.get('username')
            password = request.form.get('password')
            if username == 'coco' and password == '123456':
                # 向session会话中设置键值对
                session['login_status'] = 1
                # session['name'] = 'coco'
                # session['pwd'] = '123456'
                return render_template('index.html')
            else:
                return render_template('session_login.html')
    
    @blue.route('/session_index/')
    @is_login
    def session_index():
        # if 'login_status' in session:
            return render_template('index.html')
        # else:
        #     return render_template('session_login.html')
    
    @blue.route('/xindex/')
    @is_login
    def xindex():
        # 登录过后能够访问index.html页面
        # 没有登录不让访问,跳转到session_login.html页面
        return render_template('index.html')
    
    @blue.route('/session_logout/')
    def session_my_logout():
        # 注销
        del session['login_status']
        return render_template('session_login.html')
    
    @blue.route('/redirect_func/')
    def redirect_func():
        # 跳转到登录页面
        # return render_template('login.html')
        # return redirect('/login/')
        # url_for('蓝图的第一个参数.跳转的函数名')
        # print(url_for('first.login'))
        # return redirect(url_for('first.login'))
        # return redirect('/s_id/1/')
        return redirect(url_for('first.s_id', id=100))   
      #上       重定向   打开页面
    
    @blue.route('/s_id/<int:id>/')       
    def s_id(id):              #int:id  s_id(id):  % id 三个id的名字必须一样
        return 's_id: %s' % id
    #  下午模板内容
    
    @blue.route('/student/')
    def stu():
        stus_score = [90, 89, 100, 99, 87, 67]
        content_h2 = '<h2>千锋真棒!</h2>'
        return render_template('stu.html',
                               scores=stus_score,       # 返回变量到html文件
                               content_h2=content_h2)   # 返回变量到html文件
    

    html文件的继承

    # 1 base.html  父页面
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>
            <!--jinja2-->
            {% block title %}  # 父类开接口,在子类中写内容填充
            {% endblock %}
        </title>
        {% block css %}
        {% endblock %}
    
        {% block js %}
        {% endblock %}
    </head>
    <body>
        {% block content %}     
        {% endblock %}  
    </body>
    </html>
    
    # 2.base_min.html  父页面初始化
    {% extends 'base.html' %}     # 继承base.html
    {% block js %}        # 填父类中名为js的接口
        <!--初始化引入jquery.js文件-->
        <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
    {% endblock %}    #内容到此为止
    
    # 3. stu.html  最终显示的网页
    {% extends 'base_main.html' %}
    {% block title %}
        学生列表页面
    {% endblock %}
    
    {% block css %}
        <!--第一种写法-->
        <!--<link rel="stylesheet" href="/static/css/style.css">-->
        <!--第二种写法-->
        <link rel="stylesheet"
              href="{{ url_for('static', filename='css/style.css') }}">
    
    {% endblock %}
    
    {% block js %}
        {{ super() }}        # 加上这个,js文件两个可以同时生效。这里的script和2.xx.html两个地方的js
        <script src="2q3weftrfe.js"></script>
    {% endblock %}
    
    {% block content %}
        <!--过滤器-->
        <p> {{ content_h2 | safe }} </p>    # 将字符串显示为标签内容
        <p>{{ 'Python' | length }}</p>           # 显示字符串长度
        <p>{{ 'Python' | upper }}</p>            # 大写
        <p>{{ 'Python' | lower }}</p>                # 小写
        <p>{{ 'python' | upper | length }}</p>  # 两个连接的显示最后一个的内容
        <p>{{ 'Python' | reverse }}</p>         # 倒序
        <p>{{ content_h2 | striptags }}</p>   # 去掉字符串标签符显示内容
    
        <!--解析变量使用 {{ 变量名 }}-->
        <p> {{ scores }} </p>     # scores是py文件中传过来的变量
    
        <!--解析标签,extends,block,for-->
        {# {{ 注释内容 }} #}   # 这个表示注释,内容写在中间
        <ul>
            {% for a in scores %}  
                {{ loop.revindex0 }}       # 显示a的序号,倒着显示,最小为0
                 {{ loop.index }}           # 显示a的序号,从1开始
                {{ loop.first }}             # 第一个显示为True
                {{ loop.last }}              # 最后一个显示为True
                <li {% if loop.index == 1 %} style="color:yellow;" {% endif %}>
                    {{ a }}
                </li>
            {% else %}            # 如果for循环中scores没内容,显示下面的标签
                <li>没有学生成绩数据</li>
            {% endfor %}         # for循环的结束处
        </ul>
        <table>
            <thead>
                <th>姓名</th>
                <th>年龄</th>
            </thead>
            <tbody>
                <tr>
                    <td>张三</td>
                    <td>28</td>
                </tr>
                <tr>
                    <td>李四</td>
                    <td>29</td>
                </tr>
            </tbody>
        </table>
    {% endblock %}
    

    相关文章

      网友评论

          本文标题:03-06flask蓝图、jinja2

          本文链接:https://www.haomeiwen.com/subject/ujjxpqtx.html