zoukankan      html  css  js  c++  java
  • django Cookie 和 Session 装饰器修复技术

     
    1    回话跟踪技术
     
      可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应。
           客户向某一服务器发出第一个请求开始,会话就开始了,直到客户关闭了浏览器会话结束。 
      在一个会话的多个请求中共享数据,这就是会话跟踪技术。
     
           HTTP协议是无状态协议,也就是说每个请求都是独立的!无法记录前一次请求的状态。但HTTP协议中可以使用Cookie来完成会话跟踪。
      

      注意注意注意:

        cookie,session是用来记录请求状态的,即记录是谁发出了请求希望访问服务器,也就是说cookie是根据浏览器来记录的。

        不同的浏览器就是不同的客户端,拥有不同的cookie。

        同一个浏览器,发出的请求的状态是一样的。

        比如,同一个浏览器开了两个单独的窗口,他们共用cookie,cookie存在浏览器缓存Cache中;若再开一个单独窗口,

        第三个窗口,发出的请求一样会携带cookie(同一浏览器共用的)。

        (第三个窗口若有form表单,并有{% csrf_token %}隐式csrftoken,则会覆盖缓存中的csrf_token)

     
    2     Cookie
           Cookie翻译成中文是小甜点,小饼干的意思。在HTTP中它表示服务器送给客户端浏览器的小甜点。
      其实Cookie是key-value结构,类似于一个python中的字典。随着服务器端的响应发送给客户端浏览器。
      然后客户端浏览器会把Cookie保存起来,当下一次再访问服务器时把Cookie再发送给服务器。
       Cookie是由服务器创建,然后通过响应发送给客户端的一个键值对。
            
            Cookie是什么?  
                       保存在浏览器端的键值对
            Cookie能做什么?
                       1  做登录
                       2  记录用户的浏览习惯
                       3  简单的访问限制
       Django中如何使用Cookie?

        1. 设置Cookie
          rep = redirect('/home/')
          rep.set_cookie(key, value, max_age=60*60*24*7)   --> 设置明文Cookie,有效期是7天
          rep.set_signed_cookie(key, value, salt="", max_age=10)    --> 设置加盐的Cookie,有效期是10秒
        2. 获取Cookie
          request.COOKIES   --> 获取请求中的Cookie数据,数据格式是大字典
          request.COOKIES[key]    不推荐这种写法
          request.COOKIES.get(key, "默认值")    推荐使用这种方法取值

          request.get_signed_cookie(key, default="默认值", salt="")   --> 获取加盐的Cookie

          request.GET --> 获取URL里面的参数
          request.POST --> 获取POST请求的参数
          request.FILES --> 上传文件的数据


        3. 删除Cookie(用于注销)
          rep = redirect('/home/')
          rep.delete_cookie("key")

    3 Session
      Session是什么?
        保存在服务器端的键值对,依赖于Cookie

      为什么要有Session?
        Cookie将数据保存在客户端(浏览器)上,数据不安全。
        Cookie存储的数据有限制

      Django中Session操作
        1. 设置Session
          1. request.session[key] = value
          2. request.session.setdefault(key, value)    --> 有就啥都不干,没有就赋值
        2. 获取Session
          1. request.session[key]
          2. request.session.get(key)   推荐
        3. 删除Session
          1. request.session.delete()
          2. request.session.flush()    --> 删除Cookie和Session
        4. 清空已经过期的session数据
          request.session.clear_expired()
        5. 设置Session过期时间
          request.session.set_expiry(过期时间)

      Django中Session的配置项
        1. 配置写在settings.py中
        2. 几个常用的配置项
          1. 全局设置Session的过期时间
            SESSION_COOKIE_AGE = 1209600   --> 默认两周
          2. 设置每次请求来都刷新过期时间
            SESSION_SAVE_EVERY_REQUEST = True

      补充: CBV 装饰器版 登录验证

         1. CBV加登陆验证的装饰器
           1.原装饰器丝毫不做改动,inner函数与 func函数的参数不改动,仍为(request,*args,**kwargs)

               

                

               使用Django提供的装饰器工具:

                   from django.utils.decorators import method_decorator

                    三种方式:

                      1.

                        

                      2.

                        

                      3.

                        

           2. 改动原装饰器,(不推荐)

             

             

         2. 补充csrf相关装饰器
             from   django.views.decorators.csrf    import   csrf_exempt,  csrf_protect
              1. csrf_exempt 对某个视图取消csrf_token的验证
              2. csrf_protect 对某个视图加上csrf_token的验证

    补充:  python 内置装饰器修复技术

        

  • 相关阅读:
    PAT甲级1107. Social Clusters
    PAT甲级1103. Integer Factorization
    PAT甲级1098. Insertion or Heap Sort
    hihocoder 162周 1323 : 回文字符串
    PAT甲级1095. Cars on Campus
    PAT甲级1089. Insert or Merge
    PAT甲级1087. All Roads Lead to Rome
    PAT甲级1076. Forwards on Weibo
    PAT甲级1066. Root of AVL Tree
    PAT甲级1057. Stack
  • 原文地址:https://www.cnblogs.com/kingon/p/9436816.html
Copyright © 2011-2022 走看看