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

相关配置

Django相关配置->Session相关

python框架之Django(7)-Cookie&Session使用的更多相关文章

  1. python框架之django

    python框架之django 本节内容 web框架 mvc和mtv模式 django流程和命令 django URL django views django temple django models ...

  2. 第六篇:web之python框架之django

    python框架之django   python框架之django 本节内容 web框架 mvc和mtv模式 django流程和命令 django URL django views django te ...

  3. Python框架之Django学习

    当前标签: Django   Python框架之Django学习笔记(十四) 尛鱼 2014-10-12 13:55 阅读:173 评论:0     Python框架之Django学习笔记(十三) 尛 ...

  4. Python框架之Django的相册组件

    Python框架之Django的相册组件 恩,没错,又是Django,虽然学习笔记已经结贴,但是学习笔记里都是基础的,Django的东西不管怎么说还是很多的,要学习的东西自然不会仅仅用十几篇博文就能学 ...

  5. day09 Django: 组件cookie session

    day09 Django: 组件cookie session   一.cookie和session都是会话跟踪技术     1.什么是会话             可以理解为客户端和服务端之间的一次会 ...

  6. web框架开发-Django组件cookie与session

    http协议的每一次都是无保存状态的请求,这会带来很多的不方便,比如,一刷新网页,或者进入该网页的其他页面,无法保存之前的登录状态.为了解决类似这样的问题,引入了会话跟踪 会话跟踪技术 1 什么是会话 ...

  7. python 全栈开发,Day76(Django组件-cookie,session)

    昨日内容回顾 1 json 轻量级的数据交换格式 在python 序列化方法:json.dumps() 反序列化方法:json.loads() 在JS中: 序列化方法:JSON.stringfy() ...

  8. Django中cookie&session的实现

    1.什么叫Cookie Cookie翻译成中文是小甜点,小饼干的意思.在HTTP中它表示服务器送给客户端浏览器的小甜点.其实Cookie是key-value结构,类似于一个python中的字典.随着服 ...

  9. Django实现cookie&session以及认证系统

    COOKIE&SESSION 知识储备 由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. cookie的工作原理是:由服务器产生内 ...

随机推荐

  1. nginx伪静态配置教程总结

    在nginx中配置伪静态,也就是常说的url重写功能,只需在nginx.conf配置文件中写入重写规则即可. 当然,这个规则是需要熟悉正则表达式,只掌握nginx自身的正则匹配模式即可,对正则不了解的 ...

  2. Quartz与Spring Boot集成使用

    上次自己搭建Quartz已经是几年前的事了,这次项目中需要定时任务,需要支持集群部署,想到比较轻量级的定时任务框架就是Quartz,于是来一波. 版本说明 通过搜索引擎很容易找到其官网,来到Docum ...

  3. Android应用资源分析(老罗链接整理)

    1.Android资源管理框架(Asset Manager)简要介绍和学习计划 2.Android应用程序资源的编译和打包过程分析 3.Android应用程序资源的查找过程分析 https://my. ...

  4. Linux中rz和sz命令用法详解

    http://www.111cn.net/sys/linux/67810.htm 在linux中rz 和 sz 命令允许开发板与主机通过串口进行传递文件了,下面我们就来简单的介绍一下rz 和 sz 命 ...

  5. go get fatal: could not read Username for 'https://code.xxx.org': terminal prompts disabled

    用go get下载私有代码库的时候,莫名其妙产生了以下错误,公有代码库没有影响. chenchideMacBook-Pro:~ chenchi$ go get code.xxx.org/adarch/ ...

  6. Golang学习教程

    字节跳动已经全线从Python转Golang了,可能开始学习Golang这门语言会觉得无所适从,和Java,C++,Python等都不大一样,但是用多了会发现这门语言设计的还是很优雅的,下面总结Gol ...

  7. RChain的跨分片交易算法

    跨分片交易是一个难题,但是遗憾的是业界已经有一个项目RChain解决了这个问题. 分片方式有很多种,最难的是状态分片,什么是状态分片呢?把以太坊比作银行的话,状态指的是银行账户的当前余额.那状态分片就 ...

  8. mongo连接拒绝10061原因

    首先检查Mongo是否启动: 启动 再次检查mongo配置文件是否允许其他人访问,默认路由是否加上 .进入mongodb安装目录的bin目录,新增mongodb.conf文件,输入 bind_ip=0 ...

  9. MySql快速插入以及批量更新

    MySql快速插入以及批量更新 插入: MySql提供了可以一次插入多条数据的用法: [sql] INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6), ...

  10. 大华等其他NVR接入海康IPC H.264方法

    有一次遇到这个问题,因为时间急,没有注意,这次一个朋友也遇到这个问题,各种百度,也没有看到答案 只好自己研究了一下,最终发现以下方式来解决 下面办法可以解决海康IPC不能能过ONVIF连接到大华等其他 ...