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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,639评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,093评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,079评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,329评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,343评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,047评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,645评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,565评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,095评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,201评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,338评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,014评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,701评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,194评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,320评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,685评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,345评论 2 358

推荐阅读更多精彩内容

  • 作者:晚晴幽草轩www.jeffjade.com/2016/10/31/115-summary-of-cookie...
    饥人谷_Dylan阅读 1,225评论 0 51
  • 背景在HTTP协议的定义中,采用了一种机制来记录客户端和服务器端交互的信息,这种机制被称为cookie,cooki...
    时芥蓝阅读 2,367评论 1 17
  • 目录Cookie机制什么是CookieCookie的不可跨域名性Unicode编码:保存中文BASE64编码:保存...
    Tomatoro阅读 16,948评论 7 186
  • 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Se...
    chinariver阅读 5,623评论 1 49
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,265评论 11 349