Flask入门笔记-06_SESSION
- Flask中的session并未把session保存在服务器中, 而是把数据通过secret_key进行签名,进行非对称加密(类似
JWT
),保存在cookie中
- session是类dict类型,读取写入用kv操作即可
- 如果要使用session, 需要在给应用的设置类属性
secret_key
(一般为随机字符串)进行签名的密钥
- 如果没有指定session的过期时间, 那么默认是浏览器关闭后就自动结束
- 如果设置了session的
permanent
属性为True, 那么过期时间是31天
- 通过应用的类属性
permanent_session_lifetime
可以设置session过期时间这个属性接收datetime.timedelay的数据
from datetime import timedelta
from flask import Flask, request, session, redirect, url_for
# 创建应用
app = Flask(__name__)
# 设置session过期时间为1天
app.permanent_session_lifetime = timedelta(days=1)
# 设置应用密钥
app.secret_key = 'xiantanluohua'
# session的设置
@app.route('/login', methods=['GET', 'POST'])
def login():
# GET请求
if request.method == 'GET':
# send_static_file可以自动判断静态文件的类型, 并设置content-type, 这里不用模板渲染了,直接在static文件夹中放了login.html,返回一个登录界面,
return app.send_static_file('login.html')
# POST请求
else:
# 获取前端传来的用户名和密码并进行登录校验
username = request.form.get('username')
password = request.form.get('password')
if username == 'zhangsan' and password == '123':
# 允许session设置过期时间
session.permanent = True
# 使用session来记录用户身份 session也是类字典对象, 可以直接赋值
session['name'] = username
return '登录成功'
else:
return '密码或者用户名错误'
# session的取出
@app.route('/')
def index():
# 取出session中的用户身份, 进行判断
name = session.get('name')
if name:
return "欢迎回来, %s" % name # 已登录
else:
return "首页" # 未登录
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/login" method="post">
<label for="">用户名: </label><input type="text" name="username"><br/>
<label for="">密码: </label><input type="password" name="password"><br/>
<input type="submit" value="登录"><br/>
</form>
</body>
</html>