首页 > 其他 > 详细

cookie与session,中间件与自定义

时间:2019-12-04 23:00:22      阅读:138      评论:0      收藏:0      [点我收藏+]

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

'''

cookie与session,中间件与自定义

原文:https://www.cnblogs.com/hj59988326/p/11985976.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!