cookie与session,中间件与自定义
cookie与session原理
为什么会有这些技术
- 目的是为了保存客户端的用户状态
- 原因:HTTP协议是无状态的
cookie
保存在客户端游览器上的键值对,cookie虽然是保存在客户端游览器上的键值对,但是它是由服务端设置的
游览器有全禁止cookie的写入
django如何操作cookie
'''
小白必会三板斧:
利用obj对象才可以操作cookie
obj=HttpRespones()
return obj
obj=render()
return obj
obj=redirect()
return obj
如何设置cookie
obj.set_cookie('k1','v1') # 告诉游览器设置cookie
如何获取cookie
request.COOKIES.get('k1') # 获取游览器携带的cookie值
如何设置cookie的超时时间
request.set_cookie('k1','v1',max_age=3)
request.set_cookie('k1','v1',expires=3)
两个参数都是设置超时时间,并且都是以秒为单位
区别:expires是给IE游览器设置的
删除cookie值(注销,退出登录)
obj.delete_cookie('k1')
'''
session
保存在服务端上面的键值对,session的工作机制是需要依赖于cookie的
'''
设置sessionn
request.session['k1']='v1'
# 第一次设置的时候会报错 是因为你没有执行数据库迁移命令 生成django需要用到的一些默认表
获取session:
request.session.get('k1')
删除session
request.session.delete()
如何设置失效时间
# 设置会话Session和Cookie的超时时间
request.session.set_expiry(value)
* 如果value是个整数,session会在些秒数后失效。
* 如果value是个datatime或timedelta,session就会在这个时间后失效。
* 如果value是0,用户关闭浏览器session就会失效。
* 如果value是None,session会依赖全局session失效策略。
'''
django中间件
默认有七个中间件,只要你想要做一些网站的全局性功能,你都应该考虑使用django的中间件
- 全局的登录校验
- 全局的用户访问频率
- 全局的用户权限校验
可自定义中间件的五个方法
'''
方法一:process_request(******)
1.请求来的时候会按照settings配置文件中从上往下的顺序 依次执行每一个中间件内部定义的process_request方法,如果中间件内部没有该方法 直接跳过执行下一个中间件
2.该方法一旦返回了HttpResponse对象,那么请求会立刻停止往后走 原路立即返回p
方法二:rocess_response
1.响应走的时候会按照settings配置文件中从下往上的顺序 依次执行每一个中间件内部定义的 process_response方法
2.该方法必须有两个形参 并且必须返回response形参 不返回直接报错
3.该方法返回什么(HttpResponsed对象) 前端就能获得什么
当process_request方法直接返回HttpResponse对象之后 会直接从当前中间件里面的 process_respone往回走,没有执行的中间件都不会再执行
需要了解
方法三:process_view(self,request,view_name,*args,**kwargs)
1.路由匹配成功之后执行视图函数之前触发
2.如果该方法返回了HttpResponse对象 那么会从下往上一次经过每一个中间件里面
的process_response方法
方法四:process_template_response
1.当你返回的对象中含有render属性指向的是一个render方法的时候才会触发从下往上的顺序
def mdzz(request):
print('我是视图函数mdzz')
def render():
return HttpResponse('你好呀 我是奇葩')
obj = HttpResponse('我很好 好的像个傻逼一样')
obj.render = render
return obj
方法五:process_exception
1.当视图函数中出现错误 会自动触发 顺序是从下往上
上面这五个方法 会在特定的阶段自动触发
'''