zoukankan      html  css  js  c++  java
  • Python学习笔记Day21

    cookie就是客户端浏览器上存储的一个文件, 以字典存放数据

    {"user": 'dachengzi'}
    
    • 设置cookie返回给用户

        res = redirect('/index/')
        res.set_cookie(key,value,...)
        res.set_cookie('user','dachengzi')
        return res
      
        # 参数:
            key,              -> 键
            value,            -> 值
            max_age=None,     -> 超时时间(s)
            expires=None,     -> 超时时间(指定datatime)(IE requires expires, so set it if hasn't been already.)
            path='/',         -> Cookie生效的路径,/表示根路径,其cookie可以被任何url的访问
            domain=None,      -> Cookie生效的域名(只能设置子域名)
            secure=False,     -> https传输
            httponly=False    -> 只能http协议传输,无法被JavaScript获取(底层抓包可以获取或覆盖)
      
    • 获取cookies

        v = request.COOKIES['user']
        v = request.COOKIES.get('user')
      
    • 清除cookies

        request.COOKIES.clear()
      
    • 加密cookies

        rep.set_signed_cookie(key,value,salt='加密盐',...)
        request.get_signed_cookie(key, default=RAISE_ERROR, salt='加密盐')
      
        # 参数:
            default: 默认值
               salt: 加密盐
            max_age: 后台控制过期时间
      
    • 通过jQuery操作cookie

      由于cookie保存在客户端的电脑上,所以,JavaScript和jquery也可以操作cookie。

        <script src='/static/js/jquery.cookie.js'></script>
      
        # 设置
            $.cookie('the_cookie','the_value',{
                expires:7,      -> (Number|Date)有效期;设置整数时,单位是天;也可以设置一个日期对象;
                path:'/',       -> (String)该Cookie能访问的页面路径;'/'表示所有页面;
                domain:'jquery.com',    -> (String)创建该Cookie的页面域名;
                secure:true     -> (Booblean)若为true,那么此Cookie的传输会要求一个安全协议,例如:HTTPS;
            }) 
      
        # 读取
            $.cookie('user'); 
      
        # 删除
            $.cookie('user',null);      
      

    Session

    基于Cookie做用户验证时:敏感信息不适合放在cookie中

    Session基于cookie

    a. Session原理

    Cookie是保存在用户浏览器端的键值对

    Session是保存在服务器端的键值对

    生成随机字符串 -> 只将字符串发给cookie -> 设置用户数据的字典 -> 存入session
    

    b. Session的使用

    • 添加Session

      session默认放在数据库中,要用session需要先注册migrations、migrate

        request.session['username'] = user123
        request.session['is_login'] = True
      
    • 获取、设置Session中数据

        request.session['k1']           # 不存在报错
        request.session.get('k1',None)  # 不存在则返回none
      
        request.session['k1'] = 123
        request.session.setdefault('k1',123) # 存在则不设置
      
    • 注销

      获取当前用户的"session_key"并通过delete删除

        request.session.clear()
      
    • 前端获取session信息

        {{ request.session.username }}
      
    • 后端处理session

        # 删除用户session数据中的某一条
        del request.session['k1']   
      
        # 删除当前用户的所有Session数据
        request.session.delete("session_key")
      
        # 所有 键、值、键值对(类似字典)
        request.session.keys()
        request.session.values()
        request.session.items()
        request.session.iterkeys()
        request.session.itervalues()
        request.session.iteritems()
      
        # 获取用户session的随机字符串
        request.session.session_key
      
        # 将所有Session失效日期小于当前日期的数据删除
        request.session.clear_expired()
      
        # 检查用户的"session_key"在数据库中是否存在
        request.session.exists("session_key")
      
        # 设置
        request.session.set_expiry(value)       # 默认的超时时间是两周
            * 如果value是个整数,session会在些秒数后失效。
            * 如果value是个datatime或timedelta,session就会在这个时间后失效。
            * 如果value是0,用户关闭浏览器session就会失效。
            * 如果value是None,session会依赖全局session失效策略。
      

    c. Session配置(通用配置)

    ./settings.py
    
    SESSION_COOKIE_NAME = "sessionid"        -> cookie保存随机字符串时的key(默认)
    SESSION_COOKIE_PATH = "/"                -> Session的cookie保存的路径(默认)
    SESSION_COOKIE_DOMAIN = None              -> Session的cookie保存的域名(默认)
    SESSION_COOKIE_SECURE = False             -> 是否Https传输cookie(默认)
    SESSION_COOKIE_HTTPONLY = True            -> 是否Session的cookie只支持http传输(默认)
    SESSION_COOKIE_AGE = 1209600              -> Session的cookie失效日期(2周)(默认)
    SESSION_EXPIRE_AT_BROWSER_CLOSE = False   -> 关闭浏览器使Session过期(默认)
    SESSION_SAVE_EVERY_REQUEST = False        -> 是否每次请求都更新Session(默认)
    

    d. 引擎的配置

    ./settings.py
    
    # 数据库Session(默认)
        SESSION_ENGINE = 'django.contrib.sessions.backends.db'   
    
    # 缓存Session
        SESSION_ENGINE = 'django.contrib.sessions.backends.cache'  
        SESSION_CACHE_ALIAS = 'default'            -> 使用的缓存别名 (默认内存缓存,也可以是memcache),此处别名依赖缓存CACHES的设置
    
    # 文件Session
        SESSION_ENGINE = 'django.contrib.sessions.backends.file'    
        SESSION_FILE_PATH = None           -> 文件夹路径 如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()  如:/var/folders/d3/j9tj0gz93dg06bmwxmhh6_xm0000gn/T
    
    # 缓存+数据库Session
        # 数据库用于做持久化,缓存用于提高效率,先在缓存里找
        SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'
    
    # 加密cookie
        # 将数据加密放进cookie
        SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'
    

    参考文档

    作业

    主机管理:
        1、单表操作
        2、一对多
        3、多对多
        要求:
            a. 删除对话框
            b. 修改,添加新URL
            c. 基于cookie进行用户认证
            d. 定制显示个数
            e. 分页
    预习:
        Form: http://www.cnblogs.com/wupeiqi/articles/6144178.html
        Model:http://www.cnblogs.com/wupeiqi/articles/6216618.html
  • 相关阅读:
    iOS 关于字体根据不同屏幕尺寸等比适配的问题(zz)
    安卓开发:一种快速提取安卓app的UI图标资源的方法
    申请邓白氏编码的时候总是提示 Enter a valid Street Address 怎么办?
    利用日期、经纬度求日出日落时间 C语言程序代码(zz)
    JS导出Excel 代码笔记
    Bootstrap系列 -- 44. 分页导航
    Bootstrap系列 -- 43. 固定导航条
    Bootstrap系列 -- 42. 导航条中的按钮、文本和链接
    Bootstrap系列 -- 41. 带表单的导航条
    Bootstrap系列 -- 40. 导航条二级菜单
  • 原文地址:https://www.cnblogs.com/JeromeLong/p/13252446.html
Copyright © 2011-2022 走看看