- ajax_cookie
- Ajax 请求
Ajax 介绍:AsynchronousJavascript and XML(异步的JavaScript和xml)。
普通请求,会携带整个页面提交,最明显的特征是刷新页面,并且请求可能阻塞整个服务。这样导致:
请求内容和响应内容冗余,
用户体验特别差。
基于以上的问题,后来出现了ajax请求。
- ajax可以发起局部请求,页面整体可以不刷新,只是页面的局部刷新。
- 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请求:
- 需要一字典格式整合数据
- 需要一个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是由服务器下发到用户本地的,所以导致了一些安全性问题:
- 用户可以拒收cookie
- 用户可以仿造cookie
Session就是为了解决cookie的安全性问题提出的一种新的回话控制技术。
Session需要结合cookie进行使用。
Session存放在服务器的数据库当中
使用session之后,不会再次直接向服务器下发cookie身份信息,下发的是一个随机不重复的session_id,用户携带session_id访问服务器,服务器通过session_id判断身份,下发cookie。再次校验,校验:
- session和cookie对应
- Session是否过期
- 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