AJAX
一、choice参数
#用户表格
class Userinfo(models.Model):
#字段
username = models.CharField(max_length=255)
choice =
(
(1,'早退'),
(2,'迟到'),
(3,'缺课'),
)
state = models.IntegerField(choices=choice)
针对choice字段 如果你想获取数字所对应的中文 不能直接点字段
固定句式
print(数据对象.get_字段名_display())
当没有对应关系的时候 该句式获取到的还是数字 没有意义
不仅可以使用数字 也可以使用 英文 或者成绩分数代表 等级
record_choices = (('checked', "已签到"),
('vacate', "请假"),
('late', "迟到"),
('noshow', "缺勤"),
('leave_early', "早退"),
)
record = models.CharField("上课纪录", choices=record_choices, default="checked",
score_choices = ((100, 'A+'),
(90, 'A'),
(85, 'B+'),
(80, 'B'),
(70, 'B-'),
(60, 'C+'),
(50, 'C'),
(40, 'C-'),
(0, ' D'),
(-1, 'N/A'),
(-100, 'COPY'),
(-1000, 'FAIL'),
)
score = models.IntegerField("本节成绩", choices=score_choices, default=-1)
二、MTV与MVC模型
MTV:
M: models
T: templates
V: views
MVC:
M: models
V: views
C: con
三、AJAX
异步提交
同步异步: 描述的任务的提交方式
同步:提交任务之后 原地等待任务的返回结果 期间不干任何事
异步:提交任务之后 不原地等待 直接执行下一行代码 任务的返回通过回调机制
阻塞非阻塞:程序的运行状态
Ajax是一门js的技术 基于原生的js开发的 但是用原生的JS写代码过于繁琐
主要就是 JQuery实现AJAX
AJAX 最大的有点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。
(这一特点给用户的感受是在不知不觉中完成请求和相应的过程)
AJAX准备知识:json
AJAX传json格式数据
django 后端对JSON格式的数据 不会自动帮你解析 会直接原封不懂的给你放到request.POST中
你可以手动处理获得数据
什么是json?
- json指的是javascript对象表示法(JavaScript Object Notation)
- JSON是轻量级的文本数据交互格式
- JSON 独立于语言
- JSON 具有自我描述性,更易理解
JSON使用javascript 语法来描述数据对象,但是JSON仍然独立于语言和平台。JSON解析器和JSON库支持许多不同的编程语言
python 可以转换成JSON的数据类型
JSON python
object dict
arary list、tuple
string str
number int、float
ture True
false Flase
null non'e
CSRF(跨站请求伪造):
使用AJAX发送post请求:
第一种:
$.ajax({
url: "/cookie_ajax/",
type: "POST",
data: {
"username": "Tonny",
"password": 123456,
"csrfmiddlewaretoken": $("[name = 'csrfmiddlewaretoken']").val() // 使用JQuery取出
csrfmiddlewaretoken的值,拼接到data中
},
success: function (data) {
console.log(data);
}
})
第二种:用自己写的getCookie方法
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie !== '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) === (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
var csrftoken = getCookie('csrftoken');
function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
beforeSend: function (xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
将下面的文件配置到你的Django项目的静态文件中,在html页面上通过导入该文件即可自动帮我们解决ajax提交post数据时校验csrf_token的问题,(导入该配置文件之前,需要先导入JQuery,因为这个配置文件内的内容是基于jQuery来实现的)