Flask笔记
1.cookie:
cookie是由服务端生成的,发送给客户端,客户端保存,下次登录在请求报文中带上cookie数据;
在客户端(浏览器)进行状态保持,建议不存重要敏感信息, cookie基于域名安全,不同域名的cookie间不能相互访问
1.1设置cookie
-
登录请求成功后,使用cookie记录用户信息;
-
借助response对象设置cookie信息
3)返回响应对象在浏览器中保存cookie
response = make_response('login success')
response.set_cookie('username', ' Mercury', max_age=3600)
return response
1.2 提取cookie
1)浏览器再次请求首页的时候自动带上cookie,提取cookie中的键值对
2)借助request对象提取cookie
user_id = request.cookies.get('user_id', '')
return 'index %s' % user_id
1.3清除cookie
-
登出成功,清除cookie记录用户信息
-
借助response对象删除cookie信息
response = make_response('logout success')
response.delete_cookie('user_id')
return response
2.session()
敏感信息建议存储于服务端,而在服务端进行状态保持的是session
2.1session依赖于cookie
底层:
1)浏览器发出登录请求成功后,在服务器记录用户信息:session_id =1234,
“user_id” : 1, “username”: “Mercury”
from flask import session
...
# session本质是个字典
session['use_id'] = '1'
session['username'] = 'Mercury'
return 'login success'
2)返回响应对象给浏览器,通过cookie携带session_id告诉浏览器已保存session,并把两者保存在浏览器中
3) 再次访问时,通过cookie带上session_id, 拿了session_id便可在服务端提取session的键值对
from flask import session
...
username = session.get('username')
user_id = session.get('user_id')
return 'index %s %s' % (username, user_id)
4)推出登陆时,删除session字典
session.pop('user_name', '') # 重复删除了,便返回空
session.pop('user_id', '')
return 'logout success'
2.2session要设置加密字符串session_key
如上操作后会报RuntimeError错,解决方式如下:
# 1.创建配置类
class Config(object):
# 加密字符串随意写,起混淆加密处理
SECRET_KEY = 'aslugbgliauef&if*af'
# 2.创建app对象
app = Flask(__name__)
# 3.将配置类中的配置信息读取到项目中
app.config.from_object(Config)