Django补充(4)
来源:互联网 发布:钢铁雄心4mac 编辑:程序博客网 时间:2024/06/05 04:54
一、Cookie
- 是用户浏览器上的一个键值对- 设置超时时间
利用cookie可实现:
- 登录验证
- 页面显示条数
- 拖动位置..
两大忌讳:
- 敏感信息
- 简单
例子:
用户来时需要检测用户状态。
v = request.COOKIES.get("user")
if not v:
return redirect("/login")
用户登录后需要返回页面时带上cookie
obj = models.Userinfo.objects.filter(username=u,pwd=p).first()
if obj:
obj = redirect("/user")
//在请求者那里存放cookies
obj.set_cookie(key="user_name",value=u,max_age=10) #设置cookie失效时间
或者使用参数 expire设置当前时间延迟多长时间后失效。或者规定在哪个URL下生效,默认是“/”,表示全局。
还可以绑定域名,或者httponly,再或者使用https,secure=True。
二、Session
- 放置在服务器端的键值对
- 依赖cookies
session = {
'asdfasdfasd': {'username':'hailong'},
'asdfasdfasdf': {username:'feinikesi'},
}
例子:
检测用户的session,如果存在则直接登录
v = request.session.get("username")
if v:
returnredirect("/login")
用户登录成功设置session
obj = request.session["username"] = u
return obj
如果pycharm使用的数据库是sqlite,则session存放在django_session.
Django中默认支持Session,其内部提供了5种类型的Session供开发者使用:
- 数据库(默认)
- 缓存
- 文件
- 缓存+数据库
- 加密cookie
1、数据库Session
Django默认支持Session,并且默认是将Session数据存储在数据库中,即:django_session 表中。
a. 配置 settings.py
SESSION_ENGINE
=
'django.contrib.sessions.backends.db'
# 引擎(默认)
SESSION_COOKIE_NAME =
"sessionid"
# Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)
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,默认修改之后才保存(默认)
b. 使用
def
index(request):
# 获取、设置、删除Session中数据
request.session[
'k1'
]
request.session.get(
'k1'
,
None
)
request.session[
'k1'
]
=
123
request.session.setdefault(
'k1'
,
123
)
# 存在则不设置
del
request.session[
'k1'
]
# 所有 键、值、键值对
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的随机字符串 在数据库中是否
request.session.exists(
"session_key"
)
# 删除当前用户的所有Session数据
request.session.delete(
"session_key"
)
request.session.set_expiry(value)
*
如果value是个整数,session会在些秒数后失效。
*
如果value是个datatime或timedelta,session就会在这个时间后失效。
*
如果value是
0
,用户关闭浏览器session就会失效。
*
如果value是
None
,session会依赖全局session失效策略。
2、缓存Session
a. 配置 settings.py
SESSION_ENGINE
=
'django.contrib.sessions.backends.cache'
# 引擎
SESSION_CACHE_ALIAS
=
'default'
# 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置
SESSION_COOKIE_NAME =
"sessionid"
# Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串
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,默认修改之后才保存
b. 使用
同上
3、文件Session
4、缓存+数据库Session
数据库用于做持久化,缓存用于提高效率
a. 配置 settings.py
SESSION_ENGINE
=
'django.contrib.sessions.backends.cached_db'
# 引擎
b. 使用
同上
5、加密cookie Session
a. 配置 settings.py
SESSION_ENGINE
=
'django.contrib.sessions.backends.signed_cookies'
# 引擎
b. 使用
同上
扩展:Session用户验证
def
login(func):
def
wrap(request,
*
args,
*
*
kwargs):
# 如果未登陆,跳转到指定页面
if
request.path
=
=
'/test/'
:
return
redirect(
'http://www.baidu.com'
)
return
func(request,
*
args,
*
*
kwargs)
return
wrap
- Django补充(4)
- Django补充(1)
- Django补充(2)
- Django补充(3)
- Django数据库补充之事务
- Django笔记 通过URL传递参数的4种方法 + 补充
- Django框架学习笔记(18.一些简易的知识补充)
- Django开发博客-(6)补充和总结
- 初学命令(4)【补充】
- django 开发(4)
- 进程调度子系统(4)CFS补充
- FAT32中文版分析+补充(4)
- Django 学习笔记(4)
- 初探Django-mysite(4)
- Django 之 (4)配置
- Django学习(4):Models
- django(一)--- 安装django
- 补充阅读程序-4
- HTTP(GET和POST访问URL) -- wininet
- lombok使用-简介
- 折半插入排序
- getMeasuredHeight() 和 getHeight()的区别
- 原来人工智能+医疗这么强大,移动医疗模式逐渐成为现实
- Django补充(4)
- mysql数据库开发常见问题及优化
- android ion 内存泄漏排查
- Base64位编码与String字符串的相互转换,Base64与Bitmap的相互转换
- Android studio Android Monitor介绍一
- 倒计时(距离抢购时间)
- SQL 视图
- 深入理解js闭包
- IO流