一、Flask启用session
Flask中使用session之前需要设置一个密钥app.secret_key。生成secret_key可以使用下面的方法:
$ python -c 'import os; print(os.urandom(16))'
b'_5#y2L"F4Q8z\n\xec]/'
然后使用from flask import session导入session即可使用。示例:
# -*- coding:utf-8 -*-
import os
from flask import Flask, session, request, escape
app = Flask(__name__)
# 设置密钥
app.secret_key = os.urandom(16)
@app.route('/')
def index():
if 'username' in session:
return 'Logged in as %s' % escape(session['username'])
return 'You are not logged in.'
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
session['username'] = request.form['username']
return '''
<form method="post">
username: <p><input type=text name=username>
<p><input type=submit value=Login>
</form>
'''
if __name__ == '__main__':
app.run(host='0', port=5001, debug=True)
(1)未登陆时我们访问: http://127.0.0.1:5000/

(2)使用任意的用户名进行登陆,如: Flask

(3)登陆后再次访问:

二、Flask的session机制
Flask的session机制详见参考资料[1]。session 的大致解析过程是这样的::
- 请求过来的时候,flask 会根据 requests.cookie 信息创建出 session 变量(如果 cookie 不存在,这个变量有可能为空),保存在该请求的上下文中。
登陆之前:
登陆之后,保存在浏览器的cookie会一起发过来, 然后通过一定的逻辑处理,将requests.cookies的属于该服务器的值赋给session:
- 视图函数可以获取 session 中的信息,实现自己的逻辑处理
- flask 会在发送 response 的时候,根据 session 的值,序列化后把它写回到 cookie 中
示例:session['username'] = request.form['username']
该行代码将request.form['username']存储在session对象中。然后Flask再取出该值经过序列化(如:eyJ1c2VybmFtZSI6IkZsYXNrIn0.XQsMbA.qegm7yKuOiH9wsfEMvvMWJExL9M)后存储到cookie中。
参考资料
[1] cizixs,flask 源码解析:session: https://cizixs.com/2017/03/08/flask-insight-session/
本文介绍如何在Flask中启用session,并详细解释了Flask的session工作机制。在请求过程中,session根据cookie信息创建,登录后将用户信息存储在session中,并在响应时序列化回写到cookie。通过示例展示了如何使用session存储用户名。


1676

被折叠的 条评论
为什么被折叠?



