Django中的ajax cookie

本文介绍了在Django中如何使用Ajax进行异步请求,包括Ajax的原理、get和post请求的实现,并展示了相关HTML代码。同时,讨论了Cookie与Session在用户身份验证中的作用,分析了它们的安全性和使用场景。对于Cookie,讲解了其设置、查询、携带和删除的操作,而对于Session,提到了其在服务器上的存储和操作方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • ajax_cookie
  • Ajax 请求

Ajax 介绍:AsynchronousJavascript and XML(异步的JavaScript和xml)。

普通请求,会携带整个页面提交,最明显的特征是刷新页面,并且请求可能阻塞整个服务。这样导致:

请求内容和响应内容冗余,

用户体验特别差。

基于以上的问题,后来出现了ajax请求。

  1. ajax可以发起局部请求,页面整体可以不刷新,只是页面的局部刷新。
  2. Ajax可以发起异步请求,请求的过程当中不会阻塞web正常操作和访问。

Ajax需要js语法进行编写,原生js的ajax比较复杂,因为各种浏览器对ajax对象的兼容是不一样的,使用js写ajax,首先要完成的是各种浏览器的ajax实例创建。比较繁复,所有我们通常用jq封装过的ajax。

Ajax get请求

需要一个页面,但是需要两个视图。

第一个视图只是负责生产ajax请求的页面:

第二个视图是为了处理ajax请求的视图,通常返回json,不返回页面

前端样式(要导入jq)

Ajax_post请求,涉及到post请求就会遇到csrf问题,ajax的post请求,同样需要发生csrf_token。

相比较get请求,post请求:

  1. 需要一字典格式整合数据
  2. 需要一个csrf_token,键必须是csrfmiddlewaretoken

其他部分和get请求类似

HTML部分

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        li{
            list-style: none;
        }
        *{
            font-size: 32px;
        }
        .errorlist{
            color: red;
            font-size: 24px;
        }
    </style>
    <script src="/static/js/jquery.min.js"></script>
</head>
<body>
    <form class="register_form">
        {% csrf_token %}
        {% for u in userForm %}
        <p>
            <label>{{ u.label }}</label>
            {{ u }}
        </p>
        {% endfor %}
        <p>
            <input id="submit" type="button" value="提交">
        </p>
    </form>
    <script>
        $("#submit").click(
            function () {
                //收集数据
                var username = $("#id_username").val();
                var password = $("#id_password").val();
                var age = $("#id_age").val();
                var email = $("#id_email").val();
                var birthday = $("#id_birthday").val();
                var csrfmiddlewaretoken = '{{ csrf_token }}';
                send_data = {
                    "username": username,
                    "password": password,
                    "age": age,
                    "email": email,
                    "birthday": birthday,
                    "csrfmiddlewaretoken": csrfmiddlewaretoken,
                };
                //console.log(data)
                //编写请求的url
                var url = "/apd/";
                $.ajax(
                    {
                        url: url,
                        type: "POST",
                        data: send_data,
                        success: function (data) {
                            console.log(data)
                        },
                        error: function (error) {
                            console.log(error)
                        }
                    }
                )
            }
        )
    </script>
</body>
</html>

  • Cookie与session

由于http请求是无状态的,无法记录用户的身份,所以需要有一种机制来长期的保存和校验用户的身份,最先出现的是cookie。

Cookie:是由服务器下发用户(浏览器)本地用于校验身份的数据。Cookie工作的机制类似上面的通关文牒:

用户第一次请求服务器

服务器根据用户提交的数据来识别用户身份,然后下发对应的cookie

用户第二次携带cookie请求服务器

服务器根据cookie为用户提供服务。

 

由于cookie是由服务器下发到用户本地的,所以导致了一些安全性问题:

  1. 用户可以拒收cookie
  2. 用户可以仿造cookie

Session就是为了解决cookie的安全性问题提出的一种新的回话控制技术。

Session需要结合cookie进行使用。

Session存放在服务器的数据库当中

使用session之后,不会再次直接向服务器下发cookie身份信息,下发的是一个随机不重复的session_id,用户携带session_id访问服务器,服务器通过session_id判断身份,下发cookie。再次校验,校验:

  1. session和cookie对应
  2. Session是否过期
  3. Cookie是否合法

Cookie和session的比对:

Cookie放在用户本地,session存在服务器数据库当中

校验cookie速度比较快,但安全性不够好

校验session速度比较慢,安全性相对好

Cookie的基本操作:

设置cookie

查询cookie下发

请求携带cookie

设置cookie的参数

Key

cookie的键

Value

cookie的值

max_age

Cookie存在的有效时间,寿命

expires

Cookie超时时间,时间点和max_age冲突

path='/',

Cookie起作用的范围,默认是当前网站

domain

Cookie起作用的域名,www.baidu.com

secure

如果为True使用https传输cookie,默认false

httponly

只通过http协议传输cookie

samesite

相同网站(域名)使用cookie

校验cookie

删除cookie

删除cookie

session的基本操作:

session保存在服务器上,django提供了类字典对象对session进行操作

添加session

获取session

删除session

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值