MTV与MVC,多对多表创建的三种方式,ajax

本文深入探讨了Django框架的MTV模型及其与MVC模型的关系,详细讲解了多对多关系表的三种创建方式,以及前后端数据传输的编码格式,包括urlencoded、formdata和application/json。此外,还介绍了ajax的基本语法和特性,以及如何使用ajax进行异步数据传输。

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

一、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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值