python框架之Django(7)-Cookie&Session使用
Cookie
添加
response.set_cookie
添加明文cookie
response.set_cookie(key, value='', max_age=None, expires=None, path='/',domain=None, secure=False, httponly=False)
response.set_signed_cookie
添加加密cookie
response.set_signed_cookie(key, value, salt='', **kwargs)
参数说明
key:键
value='':值
max_age=None:超时时间(单位为秒)
expires=None:超时时间(针对IE)
path='/': Cookie生效的路径,/ 表示根路径,特殊的:根路径的cookie可以被任何url的页面访问
domain=None:Cookie生效的域名
secure=False:https传输
httponly=False:只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)
获取
request.COOKIES[key]
获取明文cookie。
request.COOKIES['key']
request.get_signed_cookie
获取加密cookie。
request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)
参数说明
default: 默认值
salt='': 加密盐
max_age=None: 后台控制过期时间
删除
delete_cookie
删除用户浏览器上之前设置的对应key的cookie。
response.delete_cookie(key, path='/', domain=None)
参数说明
key:键
path='/': Cookie生效的路径,/ 表示根路径,特殊的:根路径的cookie可以被任何url的页面访问
domain=None:Cookie生效的域名
示例
cookie版登陆校验
# 校验登录装饰器
def check_login(func):
@wraps(func)
def inner(request, *args, **kwargs):
next_url = request.get_full_path()
# 用登录时设置的盐获取指定key的cookie
if request.get_signed_cookie("isLogin", salt="salt", default=None) == "yes":
# 已经登录的用户
return func(request, *args, **kwargs)
else:
# 没有登录的用户,跳转到登录页面
return redirect("/login/?next={}".format(next_url))
return inner # 登录
def login(request):
if request.method == "POST":
username = request.POST.get("username")
passwd = request.POST.get("password")
if username == "username" and passwd == "password":
next_url = request.GET.get("next")
if next_url:
response = redirect(next_url)
else:
response = redirect("/home/")
# 设置cookie并加盐
response.set_signed_cookie("isLogin", "yes", salt="salt")
return response
return render(request, "login.html")Code
Session
添加
request.session[key] = value
request.session.setdefault(key,value) # 存在则不设置
获取
request.session[key]
request.session.get(key,default) # 未获取到值时使用默认值default
删除
del request.session[key]
相关方法
request.session.keys() # 获取所有键
request.session.values() # 获取所有值
request.session.items() # 获取所有键值
request.session.set_expiry(7) # 设置超时时间
request.session.session_key # 获取sessionid值
request.session.clear_expired() # 将所有Session失效日期小于当前日期的数据删除
request.session.exists(session_key) # 检查会话session的key(sessionid)在数据库中是否存在
request.session.delete() # 删除当前会话的所有Session数据
request.session.flush() # 删除当前的会话数据并删除会话的
request.session.set_expiry(value) Cookie # 设置会话Session和Cookie的超时时间
* 如果value是个整数,session会在些秒数后失效。
* 如果value是个datatime或timedelta,session就会在这个时间后失效。
* 如果value是0,用户关闭浏览器session就会失效。
* 如果value是None,session会依赖全局session失效策略。
示例
session版校验登录
from functools import wraps def check_login(func):
@wraps(func)
def inner(request, *args, **kwargs):
next_url = request.get_full_path()
if request.session.get("user"):
return func(request, *args, **kwargs)
else:
return redirect("/login/?next={}".format(next_url))
return inner def login(request):
if request.method == "POST":
user = request.POST.get("user")
pwd = request.POST.get("pwd") if user == "alex" and pwd == "alex1234":
# 设置session
request.session["user"] = user
# 获取跳到登陆页面之前的URL
next_url = request.GET.get("next")
# 如果有,就跳转回登陆之前的URL
if next_url:
return redirect(next_url)
# 否则默认跳转到index页面
else:
return redirect("/index/")
return render(request, "login.html") @check_login
def logout(request):
# 删除所有当前请求相关的session
request.session.delete()
return redirect("/login/") @check_login
def index(request):
current_user = request.session.get("user", None)
return render(request, "index.html", {"user": current_user})Code
相关配置
python框架之Django(7)-Cookie&Session使用的更多相关文章
- python框架之django
python框架之django 本节内容 web框架 mvc和mtv模式 django流程和命令 django URL django views django temple django models ...
- 第六篇:web之python框架之django
python框架之django python框架之django 本节内容 web框架 mvc和mtv模式 django流程和命令 django URL django views django te ...
- Python框架之Django学习
当前标签: Django Python框架之Django学习笔记(十四) 尛鱼 2014-10-12 13:55 阅读:173 评论:0 Python框架之Django学习笔记(十三) 尛 ...
- Python框架之Django的相册组件
Python框架之Django的相册组件 恩,没错,又是Django,虽然学习笔记已经结贴,但是学习笔记里都是基础的,Django的东西不管怎么说还是很多的,要学习的东西自然不会仅仅用十几篇博文就能学 ...
- day09 Django: 组件cookie session
day09 Django: 组件cookie session 一.cookie和session都是会话跟踪技术 1.什么是会话 可以理解为客户端和服务端之间的一次会 ...
- web框架开发-Django组件cookie与session
http协议的每一次都是无保存状态的请求,这会带来很多的不方便,比如,一刷新网页,或者进入该网页的其他页面,无法保存之前的登录状态.为了解决类似这样的问题,引入了会话跟踪 会话跟踪技术 1 什么是会话 ...
- python 全栈开发,Day76(Django组件-cookie,session)
昨日内容回顾 1 json 轻量级的数据交换格式 在python 序列化方法:json.dumps() 反序列化方法:json.loads() 在JS中: 序列化方法:JSON.stringfy() ...
- Django中cookie&session的实现
1.什么叫Cookie Cookie翻译成中文是小甜点,小饼干的意思.在HTTP中它表示服务器送给客户端浏览器的小甜点.其实Cookie是key-value结构,类似于一个python中的字典.随着服 ...
- Django实现cookie&session以及认证系统
COOKIE&SESSION 知识储备 由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. cookie的工作原理是:由服务器产生内 ...
随机推荐
- MySQL主从复制作用和原理
一.什么是主从复制?主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库:主数据库一般是准实时的业务数据库. 二.主从复制的作用1.做数据的热备,作为后备数据库,主数据库服务器故障后, ...
- HTML中 javascript 相对根路径问题
在HTML文档中,有很多引用的JS或者CSS文件,一般都是用相对路径来引用的,例如: ./../.. ,但是,有没有类似ASP.NET中的路径: ~/Scripts/myScript.js 但是有的: ...
- Asp.Net WebApi接口返回值IHttpActionResult
WebApi是微软在VS2012 MVC4版本中绑定发行的,webapi2.0同mvc5发行的 webapi一共有以下接口返回值 1.void无返回值2.IHttpActionResult Json( ...
- 【Java】的四种引用的区别
强引用:如果一个对象具有强引用,它就不会被垃圾回收器回收.即使当前内存空间不足,JVM 也不会回收它,而是抛出 OutOfMemoryError 错误,使程序异常终止.如果想中断强引用和某个对象之间的 ...
- perl控制流介绍(if条件,while,for循环,foreach)
1. 语句块:{ }之间的部分即为BLOCK语句块. 2. 条件语句:if ( expression ) BLOCK; if ( expression ) BLOCK1else BLOCK2 ...
- mysql的大量的sleep进程解决办法
mysql的大量的sleep进程解决办法 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/liuyong0507/article/detai ...
- hdoj:2080
夹角有多大II Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- 阿里云ECS服务器无法上传文件的解决方案
1.安装软件启动FTP服务 yum install vsftpd # 安装service vsftpd start # 启动服务chkconfig vsftpd on # 开机启动 2.防火墙ipta ...
- SpringMvc自动任务调度之task实现项目源码,@Scheduled
1.Xml配置 Spring-job.xml 并在 Spring-Application.xml中Import <?xml version="1.0" encoding=&q ...
- 安卓sdk webview获取淘宝个人信息100项,源码。
1.贴出主要代码.这个不是python,python只涉及了服务端对信息提取结果的接受.主体是java + android + js.由于淘宝各模块都是二级子域名,不能只在一个页面完成所有请求,aj ...