🍖Flask之session、闪现(message)

一.session

1.介绍

  • 除请求对象之外,还有一个 session 对象。它允许你在不同请求间存储特定用户的信息

  • 它是在 Cookies 的基础上实现的,并且对 Cookies 进行密钥签名要使用会话,你需要设置一个密钥 (app.session_interface对象)

2.cookie, session, token 区别

👉Cookie、Session、Token

  • cookie: 存放在客户端的键值对
  • session:存放在服务端的键值对
  • token: 存放在客户端,通过算法来校验(Django中使用的是jwt认证实现)

3.session 操作

  • 注意 : 在使用session之前必须设置一个秘钥
app.secret_key = "the_secret_key"  # 秘钥值随便
  • session 实现的源码位置
app.session_interface  # 后面源码详细讲解..
  • 示例
from flask import Flask, request, jsonify, make_response, session

app = Flask(__name__)
app.debug = True

# 设置秘钥
app.secret_key = 'the_secret_key'


@app.route('/', methods=['GET', 'POST'])
def index():
    # 设置session
    session['name'] = 'shawn'
    return '<h1>Hello Word!</h1>'


@app.route('/check', methods=['GET', 'POST'])
def order():
    name = session.get('name', None)
    if name:
        return '<h1>session["name"]=%s</h1>' % name
    return '<h1>session中没有找到name</h1>'


@app.route('/delete', methods=['GET', 'POST'])
def delete():
    # 删除session
    session.pop('name')
    return '<h1>name被删除</h1>'


if __name__ == '__main__':
    print(app.config)
    app.run()
  • 演示

session操作

二.闪现 (message)

1.介绍

  • 作用 : 当页面a出错时, 会跳转到页面b, 并将页面a的错误信息显示出来
  • 设值 : flash('value')
  • 取值 : get_flashed_message(),默认取所有闪现信息
  • 注意 : 闪现是基于session的,所以也必须设置app.secret_key 秘钥

2.原理

比如有两个函数 error 和 index ,在 index 页面发起请求时,index 生成一个错误,放到session中,跳转到 error 页面显示错误,然后再把 session 移除,并且这个错误只能取一次(也就是让你看一次就会被删除)

3.特点示例

# 设置多个闪现值
flash('超时错误1')
flash('超时错误2',category="x2")
flash('超时错误3',category="x3")
# 使用get_flashed_message()默认一次性全部取完
data = get_flashed_message()
print(data)
"""
超时错误1
超时错误2
超时错误3
"""

# 如果按闪现分类来取,可以实现在不同地方取出不同的闪现值
flash('超时错误1',category="x1")
flash('超时错误2',category="x2")
flash('超时错误3',category="x3")
# 按分类取闪现值
data = get_flashed_messages(category_filter=['x1'])
print(data)  # 超时错误1
data = get_flashed_messages(category_filter=['x2','x3'])
print(data0) # ['超时错误2','超时错误3']

4.使用

from flask import Flask,flash,get_flashed_messages,request,redirect

app = Flask(__name__)
app.debug = True
# 闪现基于session,所以也需要设置秘钥
app.secret_key = 'the_secret_key'


@app.route('/index')
def index():
    val = request.args.get('value')
    if val == 'hello':
        return 'Hello World!'
    flash('超时错误',category="x1")  # category表示对数据进行分类
    return redirect('/error')


@app.route('/error')
def error():
    """
    展示错误信息
    :return:
    """
    # 取出该分类的所有数据,并删除该数据,如果有多个分类则是个列表的形式["x1","x2"],
    data = get_flashed_messages(category_filter=['x1'])
    if data:
        msg = data[0]
    else:
        msg = "..."
    return "错误信息:%s" %(msg,)

if __name__ == '__main__':
    app.run()
  • 演示

是当前翁群二2

posted @ 2021-06-04 23:04  给你骨质唱疏松  阅读(162)  评论(0编辑  收藏  举报