![034b48386a645eab7616a802e94901fb.png](https://img-blog.csdnimg.cn/img_convert/034b48386a645eab7616a802e94901fb.png)
Flask Session保存在文件夹中
除去保存在数据库中,
Session
还支持保存在文件中,这里我们保留整个项目的架构,并使用文件来保存session
参考代码https://github.com/ningwenyan/demo_code/tree/master/flask_demo_code/T21
1.app.py
保持基本内容不变.
from flask import Flask
import config
from flask_session import Session as Fsession
from flask import session,redirect,url_for,render_template,escape
from formModel import LoginForm
from datetime import timedelta
app = Flask(__name__)
app.config.from_object(config)
Fsession(app)
@app.route('/')
def index():
if 'username' in session:
# escape 用来替换html中的16进制特殊符号
return 'Logged in as {}.Logout'.format(escape(session.get('username')))
return 'You are not log in Login'
@app.route('/login/', methods=['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
# 假设数据库验证通过, 添加 session
user = form.username.data
remember = form.remember.data
session['username'] = user
print(remember)
if remember:
session.permanent = True
app.config.update({'SESSION_COOKIE_LIFETIME': timedelta(days=30) })
else:
session.permanent = False
return 'success'
return render_template('login.html')
@app.route('/logout/')
def logout():
session.clear()
return redirect(url_for('index'))
if __name__ == '__main__':
app.run()
2.config.py
更新
config.py
中的内容,指定保存到文件系统,并指定保存的位置.
import os
DEBUG = True
TEMPLATES_AUTO_RELOAD = True
# 显式关闭CSRF
WTF_CSRF_ENABLED = False
# 指定Session保存类型
SESSION_TYPE = 'filesystem'
SESSION_FILE_DIR = './flask_session'
SESSION_FILE_THRESHOLD = 10 # 默认是500,大于设定值,会自动删除
SESSION_FILE_MODE = 600 # 默认值,文件模式,读写执行
SESSION_PERMANENT = False
SESSION_USE_SIGNER = True # 加密
SECRET_KEY = os.urandom(24) # 设定加密秘
SESSION_KEY_PREFIX= 'session'默认情况下,保存在当前文件夹下的
flask_session
中,如果没有这个文件夹,可以创建
mkdir flask_session
3.运行验证
运行
app.py
$ python app.py
尝试登录并访问
login.html
,当登录成功后,可以查看目录中是否有内容
❯ cd flask_session
❯ ls
2029240f6d1128be89ddc32729463129 c6c2fab146ee32903dae14542c25f2f4
72d690441984324e808ad61897999f8e如果有内容,证明
Session
已经被保存在文件夹中.