一、MTV和MVC模型
1.MTV模型(Django)
M:模型层(models.py)
T:模版层(templates)
V:视图层(views.py)
2.MVC模型:
M:模型层(models.py)
V:视图层(views.py)
C:控制器(Controller) urls.py
本质Django也是MVC模型
二、多对多关系表的三种创建方式
1、第一种,Django自动创建(添加ManyToManyField字段)
class Book(models.Model):
name = models.CharField(max_length=32)
authors = models.ManyToManyField(to='Author')
class Author(models.Model):
name = models.CharField(max_length=32)
2、纯手动创建(不可用Django的orm查询)
class Book(models.Model):
name = models.CharField(max_length=32)
class Author(models.Model):
name = models.CharField(max_length=32)
class Book2Author(models.Model):
book = models.ForeignKey(to='Book')
author = models.ForeignKey(to='Author')
info = models.CharField(max_length=32)
3、第三种(半自动,可拓展性强,随着需求添加额外字段)
关键参数:through=‘多对多表名’,through_fields=(b_table,t_table)
,b_table:所在的表名小写,t_table:关联的表名,顺序不换
class Book(models.Model):
name = models.CharField(max_length=32)
# 第三种创建表的方式
authors = models.ManyToManyField(to='Author',through='Book2Author',through_fields=('book','author'))
class Author(models.Model):
name = models.CharField(max_length=32)
# book = models.ManyToManyField(to='Book',through='Book2Author',through_fields=('author','book'))
class Book2Author(models.Model):
book = models.ForeignKey(to='Book')
author = models.ForeignKey(to='Author')
info = models.CharField(max_length=32)
三、前后端传输数据的编码格式contentType
1、urlencoded
**对应的数据格式:name=jasan&password=666(真实数据的样式)
后端获取数据:request.POST
ps⚠️:Django会将urlencoded编码的数据解析自动放到request.POST中**
2、formdata
form表单传输文件的编码格式:
后端获取文件格式数据:request.FILES
后端获取不同键值对数据:request.POST
3、application/json
ajax发送json数据,**注意编码和数据格式要一致**
四、ajax
1 、前端朝后端发请求的方式:
浏览器窗口手动是输入网址: get请求
a标签的href属性: get请求
form表单 get/post请求(默认是get请求)
ajax get/post请求
2、ajax 特性
“异步提交”,“局部刷新”
3、ajax基本语法
<1>提交的地址 (url)
<2>提交的方式 :(type)
<3>提交的数据:(data)
<4>回调函数(success)
jquery语法
<script>
$('#d1').click(function(){
$.ajax({
//提交的地址
url: '/index/',
//提交的方式
type:'post',
//提交的数据
data:{'name': 'mac', 'password': '123'},
// 回掉函数
success:function(data){
//data接收的就是异步提交的任务的结果
alert(data)
}
})
});
</script>
4、ajax默认传输数据的编码格式也是 urlencoded
5、前后端传输数据时,格式要统一,通俗的讲就是,以什么格式发送的数据,就要告诉接收的一端以同样的格式接收,一定要“数据与编码一一对应”。
6、ajax传输json 格式的数据
增加的一个关键字段:contentType:‘application/json’,
<script>
$('#d1').click(function(){
$.ajax({
url: '' //url参数可以不写,默认就是当前页面打开的地址
type: 'post',
contentType: 'application/json',
data: JSON.stringify({'name':'Mac', 'password':'123'}),
success:function(data){
alert(data)
$('#i3').val(data)
}
})
});
</script>
7、ajax 传输文件必须借助内置对象FormData
<script>
$('#d1').click(function(){
let formdata = new FomData();
// FormData对象不仅仅可以传文件还可以传普通的键值对
formdata.append('name', 'Mac');
// 获取input框存放的文件
// $('#i1')[0].files[0]
formdata.append('myfile', $('#i1')[0].files[0]);
$.ajax({
url: '',
type: 'post',
data: formdata,
// ajax发送文件要修改的两个固定参数
processData: False, // 告诉浏览器不要处理完的数据
contentType: False, // 不要用任何的编码,就用formdata自带的编码格式,Django能够自动识别该formdata对象
// 回调函数
success: function(data){
alert(data)
}
})
})
</script>
8、form表单和ajax的异同点
<1>form表单不支持异步提交 局部刷新
<2>form表单不支持传输json格式数据
<3>form表单与ajax默认传输数据的编码格式都是urlencoded