zoukankan      html  css  js  c++  java
  • python第一百零九天---Django 4

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


    a. Session原理
    Cookie是保存在用户浏览器端的键值对
    Session是保存在服务器端的键值对:
    保存在数据库
    使用session 前需要 执行
    --Python manage.py makemigrations
    --python manage.py migrate
    保存在内存中的形式:
    '随机字符串':{
    'username': '....',
    'loging': '....',
    ....
    }

    b. Cookie和Session对比

    c. Session配置(缺少cache)

    d. 示例:实现两周自动登陆
    - request.session.set_expiry(60*10)
    - SESSION_SAVE_EVERY_REQUEST = True

    PS: cookie中不设置超时时间,则表示关闭浏览器自动清除


    - session依赖于cookie
    - 服务器session
    request.session.get()#获取
    request.session[x] = x

    request.session.clear()

    - 引擎配置
     1 CACHES = {
     2             'default': {
     3                 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
     4                 'LOCATION': os.path.join(BASE_DIR,'cache')
     5                 }
     6             }
     7        SESSION_ENGINE = 'django.contrib.sessions.backends.db'   # 引擎(默认)#保存在数据库中
     8 
     9        SESSION_ENGINE = 'django.contrib.sessions.backends.cache'  #在缓存中
    10 
    11         SESSION_ENGINE = 'django.contrib.sessions.backends.file'  #在文件中
    12 
    13         SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' #缓存加数据库
    14 
    15         SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' #加密cookies
    View Code

    - 配置文件中设置默认操作(通用配置):

     SESSION_COOKIE_NAME = "sessionid"                       # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)
          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过期(默认)
          # set_cookie('k',123)
          SESSION_SAVE_EVERY_REQUEST = False                       # 是否每次请求都保存Session,默认修改之后才保存(默认)


    session 操作
    1. 获取session中的值
    request.session['key']  #获取不到会报错
    request.session.get('key',None)#获取不到返回None
        2. 设置session中的值
     request.session['key']=123# 没有创建 有则替换
    request.session.setdefault('key',123)#存在则不替换
    删除:
     del request.session['key']

    3. 所有 键 值 键值对
            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的随机字符串 在数据库中是否存在
                requset.session.exists('session_key')#request.session.get('key',None)#包含了
            #删除 用户session的随机字符串 及对应的 键值
                requset.session.delete('session_key')
                request.session.clear()#注销使用    
            #设置超时时间 :
    request.session.set_expiry(value)
                    * 如果valus为整数 ,session会在秒数后失效
                    * 如果valus为datatime或timedelta ,session会在这个时间后失效
                    * 如果valus为0 ,session会在关闭浏览器后失效
                    * 如果valus为0 ,session会在关闭浏览器后失效
    ####################################   CSRF   #########################################
    CSRF:
    a. CSRF原理
    {%csrf_token%}#前端生成一个随机字符串
    --在表单中 和COOKIS 中都有存在 但不一样

    django为用户实现防止跨站请求伪造的功能,
    通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成。
    而对于django中设置防跨站请求伪造功能有分为全局和局部。
    全局
    --在全局发送POST数据时,需要 csrf_token
    局部
    --@csrf_protect,为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置全局中间件。
    --@csrf_exempt,取消当前函数防跨站请求伪造功能,即便settings中设置了全局中间件。
    注:from django.views.decorators.csrf import csrf_exempt,csrf_protect

    b. 无CSRF时存在隐患
    c. Form提交 (CSRF)
    <form>
    {%csrf_token%}
    </form>
    d. Ajax提交 (CSRF)
    CSRF请求头 X-CSRFToken (不能有下划线)
    示例:

    $(function(){
              //
                $.ajaxSetup({//当前所有ajax发送 全局
                    beforeSend: function(xhr,settings){//发送ajax前 先执行这个函数
                        xhr.setRequestHeader('X-CSRFtoken', $.cookie('csrftoken'));
                    }
                });
    
                $('#btn1').click(function () {
                    $.ajax({
                        url: '/login/',
                        type:"GET",
                        data: {'user': 'root', 'pwd': '123'},
                        // headers: {'X-CSRFtoken': $.cookie('csrftoken')},
                        success:function(arg){
    
                        }
                    })
                });
            })


  • 相关阅读:
    (22)ASP.NET Core2.2 EF创建模型(索引、备用键、继承、支持字段)
    (21)ASP.NET Core2.2 EF创建模型(关系)
    (20)ASP.NET Core2.2 EF创建模型(必需属性和可选属性、最大长度、并发标记、阴影属性)
    (19)ASP.NET Core2.2 EF创建模型(包含属性和排除属性、主键、生成的值)
    (18)ASP.NET Core2.2 基于现有数据库创建EF模型(反向工程)
    (17)ASP.NET Core2.2 EF基于数据模型创建数据库
    (16)ASP.NET Core2.2 通用主机(HostBuilder)
    (15)ASP.NET Core2.2 Web主机(IWebHostBuilder)
    (14)ASP.NET Core2.2 中的日志记录
    前端也要懂物理 —— 惯性滚动篇
  • 原文地址:https://www.cnblogs.com/uge3/p/7407361.html
Copyright © 2011-2022 走看看