【flask框架】——状态保持cookie、session和jwt

1、设置和获取cookie

使用方法描述
response.set_cookie(“name”, “laowang”, max_age=3600)设置cookie
request.cookies.get(“name”)获取cookie
from flask import Flask, make_response, Response, request

app = Flask(__name__)


@app.route('/login')
def login():
    """
    登录成功,通过响应对象设置cookie字典信息
    :return:
    """

    # 1.构建响应对象
    response = make_response("login success")  # type:Response
    # 2.通过响应对象设置cookie
    # 参数1:key
    # 参数2:value
    # 参数3:max_age=3600 cookie的过期时长 单位s
    response.set_cookie("name", "laowang", max_age=3600)

    # 删除cookie
    # 本质是将值清空,并且将有效期置为0
    # response.delete_cookie("name")

    # 3.返回响应对象
    return response


@app.route('/index')
def index():
    """
    再次访问同一个浏览器,cookie会被自动携带上,通过请求对象提取cookie信息[字典]
    :return:
    """

    # 通过请求对象提取cookie信息
    name = request.cookies.get("name")
    print(name)
    return "index page"


if __name__ == '__main__':
    app.run(debug=True, port=8000)

2、设置和获取session

使用方法描述
session[“user_name”] = “Tom”设置session
user_name = session.get(“user_name”)获取session
from flask import Flask, session
from datetime import datetime, timedelta

app = Flask(__name__)
# 方案1:
app.secret_key = "python39"
# 方案2:
# app.config["SECRET_KEY"] = "python39"
# 1.给session设置有效时长 默认值:timedelta(days=31)
# 值:时间间隔
app.permanent_session_lifetime = timedelta(hours=2)

"""
session 本质就是一个字典,存储用户数据
session_id 发送给浏览器的【cookie机制】并且实现了数据加密
eyJ1c2VyX25hbWUiOiJqYW1lcyJ9.X5p7GQ.bhvxKPsKl_TqWXMItusriYytggE
注意:在flask中使用session必须指定加密字符串
"""


@app.route('/login')
def login():
    """
    登录成功在session中存储用户信息
    :return:
    """
    # 使用session存储用户信息
    session["user_name"] = "Tom"
    # 2.允许设置有效期
    session.permanent = True

    return 'Hello World!'


@app.route('/index')
def index():
    """
    再次访问同一个浏览器,提取session中用户信息
    :return:
    """

    # 通过请求对象提取cookie信息
    user_name = session.get("user_name")
    print(user_name)
    return "index page"


if __name__ == '__main__':
    app.run(debug=True, port=8000)

3、签发和获取校验jwt的token令牌

需求:使用jwt-token实现状态保持 [支持 html ios,安卓]
提前安装依赖包:pip install pyjwt
生成token:jwt.encode()
校验token:jwt.decode()

from flask import Flask, request
import jwt
from datetime import datetime, timedelta

app = Flask(__name__)

"""
需求:使用jwt-token实现状态保持 [支持 html ios,安卓]
提前:pip install pyjwt
生成token:jwt.encode()
校验token:jwt.decode()
"""


@app.route('/login')
def login():
    """
    登录成功生成一个2小时有效的token
    :return:
    """

    # 准备过期时长-格林威治0时区的时间戳
    expire = datetime.utcnow() + timedelta(hours=2)

    # 准备载荷
    payload = {
        "user_id": 6,
        "user_name": "Tom",
        "exp": expire
    }
    # 准备秘钥(加盐:用于编码的时候刚好的混淆)(随便写一个字符串)
    key = "python3xxxx"

    # 生成2小时有效的登录token
    token = jwt.encode(payload=payload, key=key, algorithm="HS256")

    # 将token转换成字符串
    token = token.decode()
    print(token)

    return token


@app.route('/profile')
def profile():
    """
    获取前端在请求头中携带的token
    header = {"Authorization":  token}
    :return:
    """

    # 1.从请求头中获取token
    token = request.headers["Authorization"]

    # 2.校验token-是否有效,是否过期,获取载荷信息
    try:
        payload = jwt.decode(token, key="python3xxxx", algorithms=["HS256"])
    except Exception as e:
        print(e)
        payload = None

    # 3.从载荷中提取用户信息
    if payload:
        user_id = payload.get("user_id")
        user_name = payload.get("user_name")
        return "profile: {}, {}".format(user_id, user_name)
    else:
        # 401 权限认证失败
        return "invalid token", 401


if __name__ == '__main__':
    app.run(debug=True, port=8000)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值