zoukankan      html  css  js  c++  java
  • session与cookie

    前后台分离开发的概念

    1.前台页面运行在前台服务器上,负责页面的渲染(静态文件的加载)与转跳

    2.后台代码运行在后台服务器上,负责数据的处理(提供数据请求的接口)

    跨域请求数据

    1.前台与后台有跨域问题,解决跨域安装django-cors-headers模块

    在settings.py中配置

    注册app

    INSTALLED_APPS = ['corsheaders']

    添加中间件

    MIDDLEWARE = ['corsheaders.middleware.CorsMiddleware'']

    允许跨域源

    CORS_ORIGIN_ALLOW_ALL= True

    前台代码

    $.ajax({

    url:'http://127.0.0.1:8801/login/',

    type:'post',

    data:{

    usr:'usr',

    pwd:'pwd'}

    success:function(data){

    console.log(data)}

    })

    后台代码

    def login(request):

      if request.method == 'post':

        usr = request.POST.get('usr',None)

        pwd = request.POST.get('pwd',None)

        if usr == 'abc' and pwd == '123':

          return JsonResponse({'status':'ok','usr':usr})

        return JsonResponse({'status':'error','usr',None})

    文件上传

    浏览器

    <form>

      <input class="file" type="file">

      <button type="button" class="upload">上传</button>

    </form>

    <script>

    $('.upload').click(function(){

    var form_data = new FormData();

    var file = $('.file')[0].files[0];

    form_data.append('file',file);

    $.ajax({

    url:'跨域上传地址',

    type:'post',

    data:form_data,

    contentType:false,//不设置内容类型

    processData:false,//不预处理数据

    sunccess:function(data){

    console.log(data)}

    })

    })

    </script>

    后台:

    def upload(request):

      file = request.FILES.get('file',None)

      if file:

        with open(file.name,'wb')as f:

          for line in file:

            f.write(line)

       return JsonReponse({'status':'ok','msg':'upload success'})

    文件下载

    <a href="http://127.0.0.1:8001/download/">下载</a>

    <button type="button" class="download">下载</button>

    <script>

      $('.download').click(function(){

      loaction.href="'http://127.0.0.1:8121/download/'})

    </script>

    后台:

    def download(request):

      file = open('123.zip','rb')

      response = FileResponse(file)

      response['Content-Type'] = 'application/octet-stream'

    response['Conten-Disposition'] = 'attachment;filename="%s"' %file.name

    return response

    cookie介绍

    Django用HttpResponse对象操作Cookie

    response = HttpResponse('所有的响应都是HttpResponse对象')

    设置cookie:key,value与过期时间

    response.set_cookie(key,value,max_age)

    删除cookie:key

    response.delete_cookie(key)

    设置加盐cookie:key,value与盐字符串(就是简单的加密)

    response.set_signed_cookie(key,value,salt)

    通过response对象获取Cookie

    获取key对应的value

    response.COOKIES.get(key,None)

    获取加盐后的key对应的value

    request.get_signed_cookie(key,salt)

    了解:set_cookie方法的其他参数

    1.expires:过期时间,格式为字符串类型的时间

    2.path:作用路径,/代表所有路径下均起作用

    3.domain:作用域名

    4.secure:布尔类型,浏览器是否通过HTTPS方式回传cookie

    5.httponly:布尔类型,JS能否直接访问该条cookie

    session介绍

    1.设置session

    request.session['key1']=value1

    request.session['key2']=value2

    过程:

    1.生成一个随机字符串,作为主键

    2.在sdjango_session表中插入有三个字段的一条数据

    一条数据对应一个浏览器会话

    session_key:主键-随机字符串

    session_data:该回话拥有的所有key_value形成的大字典的加密字符串

    expire_date:过期时间,默认为14天

    3.往浏览器中写入一条cookie,sessionid=主键的随机字符串

    2.获取session

    request.session.get('key',None)

    3.删除session

    request.session.delete() 只删除了当前会话对应的一条记录

    request.session.flush() 除了删除当前会话对应的一条记录外,还删除对应浏览器中的cookie,建议使用

    4.清除django-session表中所有过期的session字段

    requst.session.clear_expired()清除所有过期的Session

    5.了解

    request.session.session_key 获取当前会话对应的session_key

    request.session.exists('session_key')判断某session_key是否存在

    session的settings配置

    settings.py

    1.数据库存储

    SESSION_ENGINE = 'django.contrib.sessions.backends.db'引擎默认

    2.缓存存储

    SESSION_ENGINE = 'django.contrib.sessions.backends.cache'

    SESSION_CACHE_ALIAS ='default'使用的缓存别名(默认内存缓存,也可以是memcache)此处别名依赖缓存的设置

    3.文件存储

    SESSION_ENGINE =

    'django.contrib.sessions.backends.file'
    # 引擎
    # SESSION_FILE_PATH = '/' # 缓存文件路径,如果为None,
    则使用tempfile模块获取一个临时地址tempfile.gettempdir()
    #
    # 4. 缓存 + 数据库存储
    # SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' # 引擎
    #
    # 5. 加密Cookie
    # SESSION_ENGINE = 'django.contrib.sessions.backends
    .signed_cookies' # 引擎
    #
    # SESSION_COOKIE_NAME = "sessionid" # cookie的key名
    ,值为随机字符串
    # SESSION_COOKIE_PATH = "/" # 作用路径,
    /代表所有路径下均起作用)
    # SESSION_COOKIE_DOMAIN = None # 作用域名
    # SESSION_COOKIE_SECURE = False # 布尔类型,
    浏览器是否通过HTTPS方式回传cookie
    # SESSION_COOKIE_HTTPONLY = True # 布尔类型,
    JS能否直接访问该条cookie
    # SESSION_COOKIE_AGE = 1209600 # 数据库session字段的过期时间
    # SESSION_EXPIRE_AT_BROWSER_CLOSE = False
    # 浏览器关闭后cookie是否过期,默认False不过期,建议True
    # SESSION_SAVE_EVERY_REQUEST = False
    # 每一次请求,是否更新session字段的过期时间,
    默认False不更新,建议True

  • 相关阅读:
    string_view暴力串串题
    字符串hash暴力串串题
    C++刷leetcode几点注意事项
    微软面试算法题(整理)
    Leetcode中的Dijkstra算法
    gdb在线调试多线程程序
    2022亚马逊校园招聘软件开发实习提前批面试题
    python模块tqdm(进度条)的使用
    解决 Failed while installing Dynamic Web Module
    最新eclipse从零开始建立SpringMVC项目(详细过程)
  • 原文地址:https://www.cnblogs.com/suncunxu/p/10519116.html
Copyright © 2011-2022 走看看