cookie与session,中间件与自定义

cookie与session原理

为什么会有这些技术

  1. 目的是为了保存客户端的用户状态
  2. 原因:HTTP协议是无状态的

保存在客户端游览器上的键值对,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的中间件

  1. 全局的登录校验
  2. 全局的用户访问频率
  3. 全局的用户权限校验

可自定义中间件的五个方法

'''

方法一: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.当视图函数中出现错误 会自动触发  顺序是从下往上
	上面这五个方法 会在特定的阶段自动触发

'''
posted @ 2019-12-04 22:01  鸿鸿1  阅读(167)  评论(0编辑  收藏  举报