- 图书管理的图书增删改查
- choices参数(数据库字段设计常见)
- MTV与MVC模型
- 多对多关系的三种创建方式
- Ajax操作(重点)
- 前后端传输数据编码格式
- ajax发送json格式数据
- ajax发送文件
- django自带的序列化功能(了解,后面将路飞会将更加牛逼的序列化drf)
- ajax结合sweetalert实现删除按钮的二次确认操作
图书管理的图书增删改查
添加:
book_obj.authors.add(*authors_list)
redirect括号内可以写url,reverse,也可以直接写别名
别名需要额外给参数的话,那么就必须使用reverse解析了
choices参数(数据库字段设计常见)
相当于枚举:其中的情况
保证字段类型跟列举出来的元祖第一个数据类型一致即可
gender_choices = (
(1,‘男‘),
(2,‘女‘),
(3,‘其他‘),
)
gender = models.IntegerField(choices=gender_choices)
score_choices = (
(‘A‘,‘优秀‘),
(‘B‘,‘良好‘),
(‘C‘,‘及格‘),
(‘D‘,‘不合格‘),
)
score = models.CharField(choices=score_choices,null=True)
# models.User.objects.create(username=‘jason‘,age=18,gender=1)
# models.User.objects.create(username=‘egon‘,age=85,gender=2)
# models.User.objects.create(username=‘tank‘,age=40,gender=3)
# models.User.objects.create(username=‘tony‘,age=45,gender=4)
存的时候 没有列举出来的数字也能存(范围还是按照字段类型决定)
只要是choices参数的字段 如果你想要获取对应信息 固定写法 get_字段名_display()
如果没有对应关系 那么字段是什么还是展示什么
# 取
user_obj = models.User.objects.filter(pk=1).first()
print(user_obj.get_gender_display())
user_obj = models.User.objects.filter(pk=4).first()
print(user_obj.get_gender_display()) # 4
MTV与MVC模型
# MTV:Django号称是MTV模型
M:models
T:templates
V:views
# MVC:其实django本质也是MVC
M:models
V:views
C:controller
# vue框架:MVVM模型
多对多三种创建方式
# 全自动:利用orm自动帮我们创建第三张关系表
优点:代码不需要你写 非常的方便 还支持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_id = models.ForeignKey(to=‘Book‘)
author_id = models.ForeignKey(to=‘Author‘)
优点:第三张表完全取决于你自己进行额外的扩展
不足之处:需要写的代码较多,不能够再使用orm提供的简单的方法
不建议你用该方式
# 半自动
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)
class Book2Author(models.Model):
book = models.ForeignKey(to=‘Book‘)
author = models.ForeignKey(to=‘Author‘)
through_fields字段先后顺序:主动表,被动表
半自动:可以使用orm的正反向查询 但是没法使用add,set,remove,clear这四个方法
一般我们都会采用半自动(写代码要给自己留一条后路)
Ajax
异步提交
局部刷新
朝发送请求的方式
1.浏览器地址栏直接输入url回车 GET请求
2.a标签href属性 GET请求
3.form表单 GET请求/POST请求
4.ajax GET请求/POST请求
AJAX 不是新的编程语言,而是一种使用现有标准的新方法(比较装饰器)
AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。(这一特点给用户的感受是在不知不觉中完成请求和响应过程)
不断进行 用户名是否存在的校验。
Ajax我们只学习jQuery封装之后的版本
所以我们在前端页面使用ajax的时候需要确保导入了jQuery
ps:并不只有jQuery能够实现ajax,其他的框架也可以 但是换汤不换药 原理是一样的
小例子
$(‘#btn‘).click(function () {
$.ajax({
// 1.指定朝哪个后端发送ajax请求 不写就是朝当前地址提交
url:‘‘,
// 2.请求方式 不指定默认就是get 都是小写
type:‘post‘,
// 3.数据
data:{‘i1‘:$(‘#d1‘).val(),‘i2‘:$(‘#d2‘).val()},
// 4.回调函数:当后端给你返回结果的时候会自动触发 args接受后端的返回结果
success:function (args) {
$(‘#d3‘).val(args)
}
})
})
"""
针对后端如果是用HttpResponse返回的数据 回调函数不会自动帮你反序列化
如果后端直接用的是JsonResponse返回的数据 回调函数会自动帮你反序列化
HttpResponse解决方式
1.自己在前端利用JSON.parse()
2.在ajax里面配置一个参数
ajax里加dataType:‘json‘
"""