django进阶开发(一)--session
基于cookie做用户验证时:敏感信息不适合放在cookie中
session依赖cookie
session原理
cookie是保存在用户浏览器端的键值对
session是保存在服务器端的键值对
session服务端中存在的数据为:

session = {
随机字符串1:{
用户1的相关信息
}
随机字符串2:{
用户2的相关信息
}
}

session客户端即客户端的浏览器的cookie中存的数据是当前用户对应的随机字符串
session的工作过程
1、 生成随机字符串
2、 写到用户浏览器的cookie中
3、 保存到session中
4、 在随机字符串对应的字典中设置相关内容
而上述过程在Django中的体现为:
request.session["username"]=user
这里的username为通过request.POST.get("username")从前端html页面中获取到的用户名信息
注意:
在Django中要用session中一定要先执行:
python manage.py makemigrations
python manage.py migrate
当用户登录的时候的就会在数据库的django_session表中记录session信息
同样的通过request.session["username"]也可以获取相应的值
在这个过程中:
1、 首先获取当前用户的随机字符串
2、 根据随机字符串获取对应的内容
session的操作
request.session["k1"] 如果不存在则会报错
request.session.get["k1"],如果不存在则会报错,为了防止出错可以request.session.get('k1',none)
request.session['k1'] = 123 设置session值
request.session.setdefault('k1',123) 存在则不设置
del request.session['k1'] 删除
request.session.clear() 删除
所有 键、值、键值对
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失效策略。
配置setting.py
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,默认修改之后才保存(默认)
Django中对于session的存储方式
Django中支持session,其中内部提供了5种类型的session供开发者使用:
数据库(默认)
缓存
文件
缓存+数据库
加密cookie
1、如果是数据库,需要在settings.py中配置如下:
SESSION_ENGINE = 'django.contrib.sessions.backends.db' (引擎(默认))
2、如果是缓存session,需要在settings.py中配置如下:
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'(引擎)
SESSION_CACHE_ALIAS= 'default' 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置
1、 如果是文件session, 需要在settings.py中配置如下:
SESSION_ENGINE = 'django.contrib.sessions.backends.file' (引擎)
SESSION_FILE_PATH=None 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()
2、 如果是缓存+数据库session,需要在settings.py中配置如下:
SESSION_ENGINE='django.contrib.sessions.backends.cached_db' (引擎)
清除session
python manage.py clearsessions
from django.shortcuts import render
from django.shortcuts import HttpResponse
from django.shortcuts import redirect # Create your views here.
user = "a"
pwd = "a"
def login(request):
if request.method == "GET":
return render(request,"login.html")
elif request.method == "POST":
u = request.POST.get("user")
p = request.POST.get("password")
if u == user and p ==pwd:
#session中设置值
request.session["username"] = u
request.session["is_login"] = True
if request.POST.get("rmb",None) == "":
#设置超时时间
request.session.set_expiry(10)
return redirect("/index")
else:
return render(request,"login.html")
def index(request):
#session中获取值
if request.session.get("is_login",None):
current_user = request.session["username"]
return render(request,"index.html",{"current_user":current_user})
else:
return redirect("/login")
def logout(request):
#注销
request.session.clear()
return redirect("/login")
django进阶开发(一)--session的更多相关文章
- 第三百九十四节,Django+Xadmin打造上线标准的在线教育平台—Xadmin后台进阶开发配置2,以及目录结构说明
第三百九十四节,Django+Xadmin打造上线标准的在线教育平台—Xadmin后台进阶开发配置2,以及目录结构说明 设置后台列表页面可以直接修改字段内容 在当前APP里的adminx.py文件里的 ...
- 第三百九十三节,Django+Xadmin打造上线标准的在线教育平台—Xadmin后台进阶开发配置
第三百九十三节,Django+Xadmin打造上线标准的在线教育平台—Xadmin后台进阶开发配置 设置后台某个字段的排序规则 在当前APP里的adminx.py文件里的数据表管理器里设置 order ...
- Django 进阶篇之 CSRF,COOIKE,SESSION
1.CSRF(Cross Site Request Forgery, 跨站域请求伪造) CSRF 背景与介绍 CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网 ...
- django 2 ORM操作 ORM进阶 cookie和session 中间件
ORM操作 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述 ...
- Django进阶之session
基于cookie做用户验证时:敏感信息不适合放在cookie中 session依赖cookie session原理 cookie是保存在用户浏览器端的键值对 session是保存在服务器端的键值对 s ...
- Django进阶使用
Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行 ...
- django进阶篇
原文连接:http://www.cnblogs.com/wupeiqi/articles/5246483.html Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创 ...
- Python 第五阶段 学习记录之---Django 进阶
Model 一.创建表 1.基本结构 字段 AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - bi ...
- 02:Django进阶篇
目录:Django其他篇 01:Django基础篇 02:Django进阶篇 03:Django数据库操作--->Model 04: Form 验证用户数据 & 生成html 05:Mo ...
随机推荐
- [LeetCode] Jewels and Stones 珠宝和石头
You're given strings J representing the types of stones that are jewels, and S representing the ston ...
- 20 由属性查询学习到的ArcMap、javaScripts API相关操作
因项目需要,想要在属性查询的时候连同相关的图片一并查出来,但是因为要查询的图层众多,且字段不固定,而且还要方便后期维护,因此一个个单独配置并不是最优的解决方法 为实现这个功能,我想到如下几种解决方法 ...
- ArcGIS JavaScript开发过程中,底图产生拼接缝问题
ArcGIS JS开发过程中,地图产生了拼接缝 上图调用的是天地图,确认原地图服务是没有这种缝隙的. 其他人电脑上测试,发现没有此问题. 纠结了半天,群里问了大神,大神说是浏览器设置了缩放.... 取 ...
- swust oj 981
统计利用二叉树存储的森林中树的棵数 1000(ms) 10000(kb) 2919 / 5436 普通树及其构成的森林均可转换成相应的二叉树,反之亦然.故而可以根据相应的转换方法去统计某一二叉树对应的 ...
- 报Error creating bean with name 'dataSource' defined in class path resource 报错解决办法
在学习spring boot 的数据库操作的时候,报了一串错误 对于初学spring boot的我来说,英语水平低,看不懂报错的信息,给我造成了很大的麻烦,花了我一天的时间,经过不懈的努力后终于让我找 ...
- n&m位运算
在C/C++语言里,&代表取地址或者“位与”运算 1.取变量的地址:&变量名,这将获得该变量的地址,例:int a = 1, &p = a. 2.进行位与运算,格式是:变量1& ...
- Quartz任务调度
狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! Quartz任务调度 课程目标 : 了解Quartz框架 : 任务(Job) 触发器(Trig ...
- 关于ico图标
ico图标可以作为网页标签上显示的小logo,比如: 要获取一个网站的ico图标,只需要在url后输入/favicon.ico即可,比如 https://www.baidu.com/favicon ...
- 2018-2019-2 网络对抗技术 20165317 Exp3 免杀原理与实践
2018-2019-2 网络对抗技术 20165317 Exp3 免杀原理与实践 实验内容 任务一:正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用 ...
- VisualStudioCode创建的asp.net core控制台程序部署到linux
1.asp.net core控制台程序 static void Main(string[] args) { ; ) { Console.WriteLine("Hello World!&quo ...