Python学习笔记Day21 - Cookie&Session
Cookie
cookie就是客户端浏览器上存储的一个文件, 以字典存放数据
{"user": 'dachengzi'}
-
设置cookie返回给用户
res = redirect('/index/') res.set_cookie(key,value,...) res.set_cookie('user','dachengzi') return res # 参数: key, -> 键 value, -> 值 max_age=None, -> 超时时间(s) expires=None, -> 超时时间(指定datatime)(IE requires expires, so set it if hasn't been already.) path='/', -> Cookie生效的路径,/表示根路径,其cookie可以被任何url的访问 domain=None, -> Cookie生效的域名(只能设置子域名) secure=False, -> https传输 httponly=False -> 只能http协议传输,无法被JavaScript获取(底层抓包可以获取或覆盖)
-
获取cookies
v = request.COOKIES['user'] v = request.COOKIES.get('user')
-
清除cookies
request.COOKIES.clear()
-
加密cookies
rep.set_signed_cookie(key,value,salt='加密盐',...) request.get_signed_cookie(key, default=RAISE_ERROR, salt='加密盐') # 参数: default: 默认值 salt: 加密盐 max_age: 后台控制过期时间
-
通过jQuery操作cookie
由于cookie保存在客户端的电脑上,所以,JavaScript和jquery也可以操作cookie。
<script src='/static/js/jquery.cookie.js'></script> # 设置 $.cookie('the_cookie','the_value',{ expires:7, -> (Number|Date)有效期;设置整数时,单位是天;也可以设置一个日期对象; path:'/', -> (String)该Cookie能访问的页面路径;'/'表示所有页面; domain:'jquery.com', -> (String)创建该Cookie的页面域名; secure:true -> (Booblean)若为true,那么此Cookie的传输会要求一个安全协议,例如:HTTPS; }) # 读取 $.cookie('user'); # 删除 $.cookie('user',null);
Session
基于Cookie做用户验证时:敏感信息不适合放在cookie中
Session基于cookie
a. Session原理
Cookie是保存在用户浏览器端的键值对
Session是保存在服务器端的键值对
生成随机字符串 -> 只将字符串发给cookie -> 设置用户数据的字典 -> 存入session
b. Session的使用
-
添加Session
session默认放在数据库中,要用session需要先注册migrations、migrate
request.session['username'] = user123 request.session['is_login'] = True
-
获取、设置Session中数据
request.session['k1'] # 不存在报错 request.session.get('k1',None) # 不存在则返回none request.session['k1'] = 123 request.session.setdefault('k1',123) # 存在则不设置
-
注销
获取当前用户的"session_key"并通过delete删除
request.session.clear()
-
前端获取session信息
{{ request.session.username }}
-
后端处理session
# 删除用户session数据中的某一条 del request.session['k1'] # 删除当前用户的所有Session数据 request.session.delete("session_key") # 所有 键、值、键值对(类似字典) request.session.keys() request.session.values() request.session.items() request.session.iterkeys() request.session.itervalues() request.session.iteritems() # 获取用户session的随机字符串 request.session.session_key # 将所有Session失效日期小于当前日期的数据删除 request.session.clear_expired() # 检查用户的"session_key"在数据库中是否存在 request.session.exists("session_key") # 设置 request.session.set_expiry(value) # 默认的超时时间是两周 * 如果value是个整数,session会在些秒数后失效。 * 如果value是个datatime或timedelta,session就会在这个时间后失效。 * 如果value是0,用户关闭浏览器session就会失效。 * 如果value是None,session会依赖全局session失效策略。
c. Session配置(通用配置)
./settings.py
SESSION_COOKIE_NAME = "sessionid" -> cookie保存随机字符串时的key(默认)
SESSION_COOKIE_PATH = "/" -> Session的cookie保存的路径(默认)
SESSION_COOKIE_DOMAIN = None -> Session的cookie保存的域名(默认)
SESSION_COOKIE_SECURE = False -> 是否Https传输cookie(默认)
SESSION_COOKIE_HTTPONLY = True -> 是否Session的cookie只支持http传输(默认)
SESSION_COOKIE_AGE = 1209600 -> Session的cookie失效日期(2周)(默认)
SESSION_EXPIRE_AT_BROWSER_CLOSE = False -> 关闭浏览器使Session过期(默认)
SESSION_SAVE_EVERY_REQUEST = False -> 是否每次请求都更新Session(默认)
d. 引擎的配置
./settings.py
# 数据库Session(默认)
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
# 缓存Session
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
SESSION_CACHE_ALIAS = 'default' -> 使用的缓存别名 (默认内存缓存,也可以是memcache),此处别名依赖缓存CACHES的设置
# 文件Session
SESSION_ENGINE = 'django.contrib.sessions.backends.file'
SESSION_FILE_PATH = None -> 文件夹路径 如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir() 如:/var/folders/d3/j9tj0gz93dg06bmwxmhh6_xm0000gn/T
# 缓存+数据库Session
# 数据库用于做持久化,缓存用于提高效率,先在缓存里找
SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'
# 加密cookie
# 将数据加密放进cookie
SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'
作业
主机管理:
1、单表操作
2、一对多
3、多对多
要求:
a. 删除对话框
b. 修改,添加新URL
c. 基于cookie进行用户认证
d. 定制显示个数
e. 分页
预习:
Form: http://www.cnblogs.com/wupeiqi/articles/6144178.html
Model:http://www.cnblogs.com/wupeiqi/articles/6216618.html