day57-Flask视图和模板

一、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 %}
    

{{ i }}

{% else %}

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

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

5.宏的使用


{% macro say() %}
    

今天天气真好

{% endmacro %} {% macro good_list(id, name, price, nums) %}

编号id:{{ id }}, 名称:{{ name }}, 价格:{{ price }}, 数量:{{ nums }}

{% 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视图和模板)