Django之cookie和session

cookie和session

cookie:用来保存状态(保存服务端和客户端交互产生的数据)
当用户登录成功之后,服务端产生一个随机字符串交给客户端保存,在服务端保存数据
随机字符串:用户相关信息

什么是cookie:具体的一段信息,用来存储在浏览器上的键值对,下次访问浏览器时浏览器会自动携带这些键值对,方便服务器提取有用的信息.服务端保存在客服端浏览器上的信息都可以称之为cookie

session:数据是保存在服务端的并且也是键值对的形式

总结:
1.cookie就是保存在客服端浏览器上的信息
2.session是保存在服务端上的信息

cookie操作
虽然cookie是服务端保存给客户端的,但是客户端可以拒绝保存,如果禁止了,那么需要记录用户状态的网页都无法使用了.

视图函数的返回值

return HttpResponse()
return render()
return redirect()

obj = HttpResponse()

操作cookie

return obj

设置cookie

obj.set_cookie(key, value)

获取cookie

request.COOKIES.get(key)

用户在没有登录的情况下想要访问一个需要登录的页面,用个先跳转到登录页面,当用户输入正确的用户名和密码之后,应该跳转到之前用户访问的页面去,而不是写死到某个页面
在这里插入图片描述

设置超时时间
obj.set_cookie(key, value, max_age=5)
针对ie浏览器:
obj.set_cookie(key, value, expires=5)

注销cookie
delete_cookie(key)

session操作
sessionid:随机字符串
设置session:
request.session[key] = value
1.django内部会自动生成一个随机字符串
2.django内部自动将速记字符串和对应是数据存储到django_session表中
2.1先在内存中产生操作数据的缓存
2.2在响应结果django中间件的时候才真正的操作数据库
3.将产生的随机字符串返回给浏览器保存
获取session:
request.session.get(‘key’)
1.自动从浏览器请求中获取sessionid对应的随机字符串
2.拿着随机字符串去django_session表中查找对应的数据
3.如果比对上,则将对应的数据取出并以字典的形式封装到request.session中;如果对不上,则获取时返回的是None

django_session表中的数据条数取决于浏览器,同一个计算机上同一个浏览器只会有一条数据生效

session过期时间
request.session.set_expiry()
括号内可以放不同类型的参数:整数(多少秒过期),日期对象(到指定日期失效),0(一旦浏览器关闭就失效),不写(取决于django的默认失效时间)

注销session
request.session.delete()

中间件
1.请求来到时候先经过中间件才能到达django后端
2.响应走的时候经过中间件才能发送出去

自定义中间件是可以自定义的5个方法
必须要的:
1.process_request
请求来的时候需要经过每个中间件里的process_request,结果的顺序就是配置文件中中间件从上到下依次执行;如果中间件没有定义该方法,那么将直接跳过执行下一个中间件;如果该方法返回了HttpResponse对象,那么请求将不再继续往后执行,而是原路返回

2.process_response
响应走的时候需要经过每一个中间件里面的process_response方法,有额外的两个参数request和response;该方法必须返回一个HttpResponse对象,默认返回的就是形参response,也可以自定义返回自己的;顺序是按照配置中注册了的从下往上依次执行,如果没有定义,则直接跳过

了解:
3.process_view
路由匹配成功之后执行视图函数之前,会自动执行的方法,顺序是从上到下
4.process_template_response
只要是response方法,都需要加上response参数.返回的HttpResponse对象有render属性的时候才会触发,顺序是从下往上
(
obj = HttpResponse()
def render():
return HttpResponse()
obj.render = render
return obj
)
5.process_exception
当视图函数出现异常的情况下触发,顺序是从下往上

如何自定义中间件
1.在项目名或者应用名下创建一个任意名称的文件夹
2.在文件夹中创建一个任意名称的py文件
3.在该py文件中书写类(这个类必须继承
MiddlewareMixin),然后在类中可以定义以上5个方法
4.需要将类的路径以字符串的形式注册到settings.py中才能生效

  • 29
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力学习的小初雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值