cookies&session&认识AJAX

  1. cookies & session
    1. cookies
      1. 什么是cookies
        cookie 是一种数据存储的手段
        将一段文本保存在浏览器上的一种手段,并可以长时间保存
      2. 使用场合
        1. 记住密码
        2. 记录用户的操作习惯,行为,关键词
      3. cookie特点
        1. 长时间保存
        2. 明文
        3. 可以通过浏览器修改
        4. 有浏览器之分
        5. cookie有网站之分
      4. Flask中使用cookies
        1. 保存数据到cookies中
          通过响应对象将数据保存进cookies中
          1. 响应对象的构建
            1. 重定向就是响应对象
              resp = redirect("/xxx")
            2. 通过make_response()将字符串构建成响应对象
              from flask import make_response
              resp = make_response("" 或 render_template())
          2. 保存cookie的语法
            响应对象.set_cookie(key,value,max_age)
            key:保存到cookie中的数据的名称
            value:保存到cookie中的数据的值
            max_age:最大的存活时长,以秒为单位
          3. 获取cookies的值
            通过 request.cookies 获取所有的cookies值
            request.cookies 的类型是 dict
          4. 删除cookie的值
            响应对象.delete_cookie(‘key’)
    2. session
      1. 什么是session
        session - 会话
        当浏览器打开时,跟一个服务器交互的过程就是一次会话
        session 的目的:为了保存会话中所涉及到的一些信息

      2. session在Flask中的实现

        1. 配置 SECRET_KEY
          app.config[‘SECRET_KEY’] = “123456”

        2. 使用session
          from flask import session

          1. 向session中保存数据
            session[‘key’] = value
          2. 从session中获取数据
            value = session[‘key’]
            value = session.get(‘key’)
          3. 删除session中的数据
            del session[‘key’]
      3. session PK cookie

        1. cookie
          1. 保存在客户端[位置]
          2. 因为是明文,可以修改,安全性较低[安全]
          3. 长久保存[时长]
        2. session
          1. 保存在服务器上[位置]
          2. 安全性较高[安全]
          3. 临时存储[时长]
  2. AJAX
    1. 什么是AJAX
      Asynchronous Javascript And Xml (阿贾克斯)
      异步的 JS 和 xml

      通过 JS 异步的向服务器发送请求并接收响应,响应的数据是XML/JSON格式的

      同步访问:
      当客户端浏览器向服务器发送请求时,服务器在处理的过程中,浏览器只能等待
      异步访问:
      当客户端浏览器向服务器发送请求时,服务器在处理的过程中,浏览器可以做其他操作,无需一直等待

      AJAX优点:

      1. 异步 访问
      2. 局部 刷新

      使用场合:

      1. 搜索建议
      2. 表单验证
      3. 前后端完全分离
        (SPA) Single Page Application
    2. AJAX核心对象 - 异步对象

      1. 异步对象 - XMLHttpRequest
        由JS提供
        简称为 xhr
        代替浏览器向服务器端发送异步的请求并接收响应

      2. 创建异步对象

        1. 主流的异步对象是XMLHttpRequest类型的(IE7+,Chrome,Firefox,Safari,Opera)全部支持
        2. IE低版本(IE7以及以下)不支持XMLHttpRequest,需要使用 ActiveXObject() 来创建异步对象

        判断浏览器的支持性:
        if(window.XMLHttpRequest){
        alert(“支持xhr”);
        }else{
        alert(“支持ActiveXObject”);
        }

        创建XMLHttpRequest:
        var xhr = new XMLHttpRequest();
        创建ActiveXObject:
        var xhr = new ActiveXObject(“Micorsoft.XMLHTTP”);

        • 练习:
          1. 创建 common.js
          2. 声明一个函数 - createXhr()
          3. 在函数中根据浏览器的支持性创建对应的异步对象,并返回
实现 Django 登录界面分离,隔离 session 的代码可以分为以下几个步骤: 1. 创建一个独立的 Django 应用,用于处理登录请求和验证用户身份。 2. 在该应用中,编写登录页面的视图函数和模板,实现用户登录功能。 3. 在登录成功后,将用户信息保存在 session 中,并返回一个包含 session ID 的 JSON 响应。 4. 在其他应用中,使用 Ajax 调用登录应用的登录接口,获取 session ID。 5. 将获取到的 session ID 存储在当前应用的 cookie 中,并设置 cookie 的 domain 属性为当前应用的域名,以隔离 session。 6. 在其他应用中,使用 Django 的中间件来读取当前应用的 cookie 中的 session ID,并将其解析为用户信息。 以下是具体的代码实现: 1. 创建一个名为 "login" 的 Django 应用。 2. 在该应用中,创建一个名为 "views.py" 的文件,并编写以下代码: ```python from django.shortcuts import render, redirect from django.contrib.auth import authenticate, login from django.http import JsonResponse def login_view(request): if request.method == 'POST': username = request.POST.get('username') password = request.POST.get('password') user = authenticate(request, username=username, password=password) if user is not None: login(request, user) return JsonResponse({'session_id': request.session.session_key}) else: return JsonResponse({'error': 'Invalid credentials'}) else: return render(request, 'login.html') ``` 3. 在 "templates" 目录下创建一个名为 "login.html" 的模板文件,并编写以下代码: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Login</title> </head> <body> <h1>Login</h1> <form method="post"> {% csrf_token %} <div> <label for="username">Username:</label> <input type="text" name="username" id="username"> </div> <div> <label for="password">Password:</label> <input type="password" name="password" id="password"> </div> <input type="submit" value="Login"> </form> </body> </html> ``` 4. 在 "settings.py" 文件中,添加以下代码: ```python LOGIN_URL = '/login' ``` 5. 在其他应用中,创建一个名为 "middleware.py" 的文件,并编写以下代码: ```python from django.conf import settings from django.contrib.sessions.backends.db import SessionStore class SessionMiddleware: def __init__(self, get_response): self.get_response = get_response def __call__(self, request): session_id = request.COOKIES.get(settings.SESSION_COOKIE_NAME) if session_id: session = SessionStore(session_key=session_id) request.session = session response = self.get_response(request) if session_id and request.session.session_key != session_id: response.delete_cookie(settings.SESSION_COOKIE_NAME, domain=settings.SESSION_COOKIE_DOMAIN) return response ``` 6. 在 "settings.py" 文件中,将 "middleware.SessionMiddleware" 添加到 "MIDDLEWARE" 列表中。 7. 在其他应用中,编写以下代码来调用登录应用的登录接口: ```javascript $.post('/login', {'username': 'test', 'password': 'test'}, function(data) { document.cookie = 'sessionid=' + data.session_id + '; domain=.example.com; path=/'; }); ``` 注意,上述代码中的 "example.com" 应该替换为当前应用的域名。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值