django中session实现方式
来源:互联网 发布:ubuntu 断电无法启动 编辑:程序博客网 时间:2024/05/19 11:48
cookie ● 客户端存储技术 ○ cookie是存在浏览器的 ○ 广告 ○ 获得cookies COOKIES 【字典】 ○ 所有的字典的操作get,items,[''] ● 如何写一个cookies ○ response.set_cookie() 写cookie ○ key,value ○ 过期时间 (expires)如果过期就自动删除,不过期的话访问服务器的时候并且在同一路径下会自动携带cookie的值 ○ 回话结束 浏览器关了 ○ max_age = 60*10 10分钟 ○ path 路径 路径相同会自动携带 (path) path='/user/' ○ 当你访问127.0.0.1:8000/user/*** 子路径也算 ○ 域名要相同 ● 什么时候会携带cookie ○ cookie没有过期 ○ 相同path ○ 相同域名 ● 悬浮广告 ● cookies的第一应用 ○ 保存商品的浏览记录(调整顺序和去重) ● cookies小结 ○ cookies 所有对字典的操作都可以对cookie ○ cookie的五个属性 key,value,expries,path,domain ○ 从request.COOKIES获得cookie ○ cookie的过期时间None(会话结束就删除。(浏览器关闭)),正数(多少时间过期) ○ 从response.set_cookie存储cookie ○ 能不能使用cookie保存用户的账号和密码?不行。(cookie不能存储敏感信息,而且存储大小和存储数量邮箱) ● session(会话) ○ 服务器的一种存储技术 ○ 加入购物车,免登陆 ○ 默认session会在数据库中有一张表 ○ request.session获得session ● session详解 ○ session from django.contrib.sessions.backends.db import SessionStore ○ session是基于cookie的 ○ 关键是sessionid 不重复![](https://i.imgur.com/4P326bw.png) ○ 将对象转换成字符串(序列化) ○ {'username':'admin','password':'admin'} ○ session中不能存储自定义对象,如果存储需要转换成json对象 ● 对象是有什么组成的 ○ 父类的dict+本类的dict+对象的dictsession中存储字典 ● 出问题 ● session过期时间 ● 清空session ● 删除session没讲 ● session购物车python setup.py sdist upload -r pypi python setup.py register sdist uploadcookie ● cookie 在请求中传给服务器(Cookie: sex="\347\224\267"; age=10; name=django) ● cookie 在响应头中传浏览器Set-Cookie: age=10; Path=/Set-Cookie: name=django; expires=Tue, 31-Oct-2017 01:26:37 GMT; Max-Age=600; Path=/Set-Cookie: sex="\347\224\267"; Path=/cookiedemo/ ● 什么传递给服务器cookie? ○ 域名 ○ path ○ 时间 ● request.COOKIES 字典,只要是浏览器发送的一般都认为是只读Session ● sesssion基于cookie,服务器给每一个访问的浏览器唯一的编号(seesionid),下次访问的时候携带sessionid过来,服务器就知道你之前做了什么事情 ● session 服务端存储技术(django默认实现是基于数据库的) ● settings中 INSTALL_APP中 'django.contrib.sessions', ● 写一个demo,记住浏览器发送的所有的信息,然后显示给你 ● session的操作 类字典 SessionStore实例 ○ request.sesssion 获得session ■ 例:uname = request.session.get('uname','如果没有返回这个自定义信息') ■ uname = request.session['uname'] ○ request.session 初次给session里面赋值的时候就会创建session ○ request.session['user']=user(序列化的) ■ name = request.POST['uname'] ■ request.session['uname'] = name ○ request.session.get('user','默认值') 获得user的值 ○ del request.sesssion['loginError'] 删除session中的某个值 ○ 获得sesssionkey request.sesssion.sessionkey ○ 清空sesssion里面所有的数据 request.session.clear() ○ 删除session,request.sesssion.flush() 删除sesssion,包括数据中的 ○ 设置过期时间,None(不过期),0(浏览器关闭过期)10000,时间,什么时间之后过期 ● demo ○ 免登陆 ○ 登出 del request.session['user'] 重定向登录界面 ○ 加购物车(bug)(字典),基于session的判断有没有购物车创建购物车{}判断此商品在不在购物车之内在就+1,不在就添加到购物车,默认1再将购物车放到session中 ● django会在session改变的时候讲数据存储到数据库 ○ session['age']=10 首次添加 ○ sesssion['age']=20 算 ○ sesssion['cart']={'商品的唯一标示':{'goodsid':101,'colorId':101,'sizeId':sizeid},....} ○ sesssion['cart']['商品的唯一标示']['sizeId']=200 这算不算改变?不算,因为字典对象没有发生改变,字典里面的字典发生了改变。 ○ request.sesssion.modified = True ● 需要定时手动清空无效的session ○ python manage.py clearsessions ● 修改session的默认缓存方式 ○ 数据库 django.contrib.sessions.backends.db ○ 文件SESSION_ENGINE='django.contrib.sessions.backends.file'SESSION_FILE_PATH=os.path.join(BASE_DIR,'cache') ○ cache 内存SESSION_ENGINE='django.contrib.sessions.backends.cache' ○ 双缓存 (内存+数据库),读取(先读内存,内存没有读取数据库,存到内存),写(先写内存再写数据库)SESSION_ENGINE='django.contrib.sessions.backends.cached_db' ○ 基于cookie的SESSION_ENGINE='django.contrib.sessions.backends.signed_cookies' ○ redisstatic ● STATIC_URL = '/static/' 表示在访问静态资源的时候,url /static/资源名 ○ STATIC_URL是给浏览器看的 ● STATICFILES_DIRS 让服务器去哪里找静态资源 STATICFILES_DIRS=[ os.path.join(BASE_DIR,'abc'), os.path.join(BASE_DIR,'static') ] ● 好处 304手动模拟static文件(基于浏览器缓存) ● 响应头 ○ Cache-Control ○ Last_Modified ○ Set-Cookie ● 请求头 ○ IfModifiedSince 会携带发给浏览器的修改时间 ○ Cookie ○ referer(防盗链)盗下载链接 ● 让浏览访问我的时候,携带文件上一次修改的时间 ● 从请求中获得上一次修改的时间, ● 和本地这个文件现在修改时间对比,如果一样,说明没修改。返回304,返回新文件内容redis ● wget 下载,解压 ● ./configure(待定) ● make 编译 (gcc) ● make install ● cd redis解压目录 ● redis-cli 判断是否安装成功 ● 配置环境变量 ● 配置自启(一)django有四中session实现方式1、数据库(database-backed sessions)2、缓存(cached sessions)3、文件系统(file-based sessions)4、cookie(cookie-based sessions)其中数据库方式是默认的也是默认就启用的,其实现方式实际上是通过django中间件实现的,配置在INSTALLED_APPS中的django.contrib.sessions。目前先使用数据库方式的session,其他以后继续补充,首先考虑改进为“缓存”。(二)django session使用基础1、存放数据到sessionrequest.session['some_id'] = some_id2、从session中读取存放的数据session.get('some_id', False)3、从session中将数据删除del request.session['some_id']4、让session过期request.session.set_expiry()5、在命令行访问sessin数据# 生成并保存session(利用SessionStore)from django.contrib.sessions.backends.db import SessionStoresessionStore = SessionStore()sessionStore["str"] = "hello" # 字串映射sessionStore["dict"] = {}; # 可以定义多级的字典结构sessionStore["dict"]["key1"]="value1"sessionStore["dict"]["key2"]="value2"sessionStore.save();print(sessionStore.session_key);print(sessionStore.keys());session_key = sessionStore.session_key;# 读取保存的sessionfrom django.contrib.sessions.models import Sessionsession = Session.objects.get(pk=session_key)print(session.session_data); # 返回session的存储(加密过)print(session.get_decoded()); # 返回session的数据结构(加过解码) print(session.expire_date);注意:(1)保存数据的使用使用的是SessionStore读取数据使用使用的是Session。(2)在使用多级字典时session["dict"]["key1"] = "something" django默认不会对多级对象进行保存,需要显示的使用代码
request.session.modified = True阅读全文0 0
- django中session实现方式
- Session 在分布式系统中实现方式
- Django中session的使用
- session实现方式
- django 快速实现session的操作
- Django通过session实现多语言切换
- Django中实现分页
- django模板中直接使用session
- 在django模板中使用session数据
- 在Django 模板中使用session
- django 中cookies和session的用法
- django 中ajax、session、cache的使用
- django session
- Django session
- django session
- web session 共享实现方式
- memcache方式实现session共享
- 集群中session实现
- oracle闪回技术
- 2017.11.16心得
- 判断是否为pc还是手机端以及手机端a标签点击闪亮处理
- android adb端口被占用解决方案
- Jmx 资源管理——demo篇
- django中session实现方式
- Netty实战读书笔记(第八章)
- 学习列表 java 进阶
- 1073. 多选题常见计分法(20)
- ViewModel、ViewData、ViewBag、TempData、Session In MVC 對比
- 云客Drupal8源码分析之实体字段管理器entity_field.manager
- java并发编程的艺术【三】-【一】java内存模型基础
- 用meta name="renderer" content="webkit|ie-comp|ie-stand"来切换360双核安全浏览器的极速模式和兼容模式
- 初识python中的类与对象
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
万利达点歌
万利达水壶
万利达下载
万利达小吊机
万利达z180
万利达移动电话
万利达烟机
万利达一体机
万利达t1
万利达功放机
万利达集团
万利达机顶盒
万利达纸品
万利达净水器价格
万利达倒闭
万利达智能机
万利达电子厂
万利达电器
万利达 a10
万利达酷奔k1
万利达开水壶
万利达厨房电器
万利达d800
万利达q5
万利达dvp
万利达k598
万利达t11
万利达平板
万利达造纸厂
万利达s2000
万利达s23
万利达代理
万利达手表
万利达小锅
万利达a10
万利达学生电脑
万利达zpad t10
万利达下载中心
万利达s2800
万利达a220
万利达 a802