美文网首页
day57-Flask视图和模板

day57-Flask视图和模板

作者: xdxh | 来源:发表于2018-12-18 17:07 被阅读0次

    一、session数据存储在客户端

    1、session数据存储在客户端的概念
    Flask采用'secure cookie'方式保存session,即session数据是使用base64编码后保存在客户端的cookie中,也就是说无须依赖第三方数据库保存session数据。

    2.设置session

    from flask import Blueprint, redirect, url_for, request, render_template, session
    
    
    @blueprint.route('/login/', methods=['GET', 'POST'])
    def login():
        if request.method == 'GET':
            return render_template('login.html')
        if request.method == 'POST':
            username = request.form.get('username')
            password = request.form.get('password')
            if username == 'coco' and password == '123123':
                session['user_id'] = 1
    
            return redirect(url_for('first.hello'))
    

    二、session数据存储在服务端

    1.session数据存储在服务端,分为以下三步骤
    步骤1: 当客户端发送请求到服务端的时候,服务端会校验请求中cookie参数中的sessionid值,如果cookie中不存在sessionid则认为客户端访问服务端时,是发起了一个新的会话。

    步骤2: 如果是新的会话,则服务端会传递给客户端一个cookie,并在cookie中存储一个新的sessionid值,并将相关数据保存在session中。

    步骤3: 客户端下次再发送请求的时候,请求上下文对象会携带cookie,通过校验cookie中的sessionid值,即可判断是否是同一会话。

    步骤4: 如果校验会话是同一会话,则可以从session中获取到之前保存的数据。

    2.安装

    pip install flask-session
    
    pip install redis
    

    3.基础语法

    # 设置session
    session['key'] = value
    
    # 读取session
    result = session['key'] :如果内容不存在,将会报异常
    
    result = session.get('key') :如果内容不存在,将返回None
    
    # 删除session
    session.pop('key')
    
    # 清空session中的所有数据
    session.clear()
    

    4.配置连接redis数据库

    import redis
    from flask import Flask
    from flask_script import Manager
    from flask_session import Session
    
    from views import blue
    
    app = Flask(__name__)
    
    app.register_blueprint(blueprint=blue, url_prefix='/app' )
    
    app.secret_key = '1234567890qwertyuiopasdfghjklzxcvbnm'
    
    # 配置session
    app.config['SESSION_TYPE'] = 'redis'
    app.config['SESSION_REDIS'] = redis.Redis(host='127.0.0.1', port=6379)
    
    # 初始化session和app对象
    se = Session()
    se.init_app(app)
    
    manage = Manager(app)
    
    if __name__ == '__main__':
        manage.run()
    

    5.设置session

    from flask import Flask, Blueprint, render_template, \
        session, url_for, request, redirect
    
    blue = Blueprint('app', __name__)
    
    
    @blue.route('/login/', methods=['GET', 'POST'])
    def login():
        if request.method == 'GET':
            return render_template('login.html')
    
        if request.method == 'POST':
            username = request.form.get('username')
            password = request.form.get('password')
            if username == 'coco' and password == '123123':
                session['user_id'] = 1
                return redirect(url_for('app.index'))
    
    
    @blue.route('/index/')
    def index():
        return render_template('index.html')
    

    三、flask模板

    1.block标签

    {% block title %}
    {% endblock %}
    
    {% block css %}
    {% endblock %}
    
    {% block js %}
    {% endblock %}
    
    {% block content %}
    {% endblock %}
    

    2.extends标签

    {% extends 'base.html' %}
    

    3.for标签

    {% for i in c %}
        <p>{{ i }}</p>
    {% else %}
    

    loop.index:循环迭代索引
    loop.revindex:循环逆序迭代索引
    loop.first:是否第一次迭代
    loop.last:是否最后一次迭代
    4.if标签
    注意:jinja2中没有ifequal标签。

    {% if nums ==10 %}
        {{ nums }}
    {% endif %}
    

    5.宏的使用

    <!--宏定义-->
    {% macro say() %}
        <p>今天天气真好</p>
    {% endmacro %}
    
    {% macro good_list(id, name, price, nums) %}
        <p>编号id:{{ id }}, 名称:{{ name }}, 价格:{{ price }}, 数量:{{ nums }}</p>
    {% endmacro %}
    
    <!--引入宏-->
    {% from 'functions.html' import say %}
    {% from 'functions.html' import good_list %}
    
    <!--调用宏-->
    {{ say() }}
    
    {{ good_list('1', '草莓', '10', '1000') }}
    {{ good_list('2', '苹果', '5', '1000') }}
    

    6.解析变量

    @blue.route('/temp/')
    def temp():
        content = [65, 13, 786, 867, 999]
        return render_template('temp.html', c=content)
    
    {% block content %}
        {{ c }}
    {% endblock %}
    

    7.过滤器
    注意:可以链式调用过滤器。

    <!--解析文本中的样式-->
    {{ content_h2 | safe}}
    
    <!--删除文本中的样式-->
    {{ content_h2_new | striptags }}
    
    <!--文本长度-->
    {{ content_h2 | length }}
    
    <!--去除文本中前后的空格-->
    {{ content_h2_new | trim }}
    
    <!--文本内容大写-->
    {{ 'python' | upper }}
    
    <!--文本内容小写-->
    {{ 'Python' | lower }}
    
    <!--链式调用过滤器-->
    {{ content_h2_new | trim | length }}
    

    相关文章

      网友评论

          本文标题:day57-Flask视图和模板

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