choices参数的使用
choices参数应用场景:
学历:小学 初中 高中 本科 硕士 博士 客户来源:微信渠道 广告 介绍 QQ 性别:男 女 未知
对于以上可能被我们列举完的字段我们一般都是选择使用choices参来做
建表
class UserInfo(models.Model):
username = models.CharField(max_length=64)
password = models.CharField(max_length=32)
gender_choices = (
(1, '男'),
(2, '女'),
(3, '未知'),
)
gender = models.SmallIntegerField(choices=gender_choices)
score_choices=(
('A', '优秀'),
('B', '良好'),
('C', '及格'),
('D', '不及格'),
)
score = models.CharField(choices=score_choices,max_length=32, null=True)
res=models.UserInfo.objects.filter(pk=4).first()
print(res.gender)
print(res.get_score_display())
MVC和MVT模式
MVC
什么是MVC?
MVC就是把Web应用分为模型(M),控制器(C)和视图(V)三层,他们之间以一种插件式的、松耦合的方式连接在一起,模型负责业务对象与数据库的映射(ORM),视图负责与用户的交互(页面),控制器接受用户的输入调用模型和视图完成用户的请求
其示意图如下所示:
MVT
Django的MTV模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,Django的MTV分别是指:
M 代表模型(Model): 负责业务对象和数据库的关系映射(ORM)。
T 代表模板 (Template):负责如何把页面展示给用户(html)。
V 代表视图(View): 负责业务逻辑,并在适当时候调用Model和Template。
除了以上三层之外,还需要一个URL分发器,它的作用是将一个个URL的页面请求分发给不同的View处理,View再调用相应的Model和Template,MTV的响应模式如下所示:
多对多的三种创建方式
方式一:通过ManyToManyField自动创建第三张表
class Book(models.Model):
title = models.CharField(max_length=32, verbose_name="书名")
class Author(models.Model):
name = models.CharField(max_length=32, verbose_name="作者姓名")
books = models.ManyToManyField(to="Book", related_name="authors")
这是通过ORM自带的ManyToManyField自动创建第三张表
全自动创建的优缺点
优势:就是自动帮我们创建表
缺点:就是扩展性非常差
方式二:自行创建第三张表
class Book(models.Model):
title = models.CharField(max_length=32, verbose_name="书名")
class Author(models.Model):
name = models.CharField(max_length=32, verbose_name="作者姓名")
class Author2Book(models.Model):
author = models.ForeignKey(to="Author")
book = models.ForeignKey(to="Book")
register_time=''
这是自己创建第三张表,分别通过外键关联书和作者
全手动创建的优缺点
优势:可扩展性很高
缺点:不能使用orm查询方法了
方式三:设置ManyTomanyField并指定自行创建的第三张表
class Book(models.Model):
title = models.CharField(max_length=32, verbose_name="书名")
class Author(models.Model):
name = models.CharField(max_length=32, verbose_name="作者姓名")
books = models.ManyToManyField(to="Book", through="Author2Book", through_fields=("author", "book"))
class Author2Book(models.Model):
author = models.ForeignKey(to="Author")
book = models.ForeignKey(to="Book")
这是自己创建第三张表,并通过ManyToManyField指定关联
全自动创建的优缺点
优点:还可以使用orm的方法及正反向查询
缺点:不能使用add set remove clear方法了
AJax技术
什么是ajax?
ajax就是一种前端技术,用于朝着后端程序发送请求和数据
前端向后端发送请求的方式:
1、浏览器地址栏输入url地址 请求方式默认并且只能是:get请求
2、a标签 请求方式默认并且只能是:get请求
3、form表单 请求方式可以是:get与post请求
4、ajax技术 请求方式可以是:get与post请求
AJAX的特点:
1. 异步提交
2. 局部刷新
AJax案例
前端页面中
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style></style>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<script>
$(".btn").click(function () {
var inp1 = $("#inp1").val();
var inp2 = $("#inp2").val();
$.ajax({
url:'',
type:'post',
dataType:'json',
data:{inp1:inp1, inp2:inp2},
success:function (res) {
console.log(res,)
console.log(typeof res)
console.log(res.username)
console.log(res.password)
}
})
})
</script>
</body>
</html>
视图函数中
def ab_ajax(request):
if request.method=='POST':
print(request.POST)
import json
user_dict = {"username":"kevin", "password":123}
return HttpResponse(json.dumps(user_dict))
return render(request, 'ab_ajax.html')