关于Flask 视图介绍
828 2023-04-03 04:00:24
Choice参数(数据库设计字段常见)
针对某一个字段可能是可以完全列举的, 我们可以使用choice字段
例如: 性别, 成绩等级
gender_choices = (
(1, '男'),
(2, '女'),
(3, '其他'),
)
gender = models.IntegerField(choice=gender_choices)
score_choices = (
('A','优秀'),
('B','良好'),
('C','及格'),
('D','不合格'),
)
# 保证字段类型跟列举出来的元组第一个数据类型一致即可
score = models.CharField(choices=score_choices,null=True)
2. 获取字段对应的中文信息
user_obj = models.User.objects.filter(pk=1).first()
print(user_obj.gender) # 这里打印的是元组的第一个元素
# 只要是choices参数的字段, 如果你想要获取对应的信息, 固定写法 get_字段名_display()
print(user_obj.get_gender_display())
# 如果没有对应关系, 是什么就展示什么
###MTV与MVC模型```pythonM:modelsT:templatesV: views# MVC: 其实django的本质也是MVCM: modelsV: viewsC: controller# 全自动: 利用ORM自动帮我们创建第三张表class Book(models.Model):anme = models.CharField(max_length=32)authors = models.ManyTOManyField(to='Author')class Author(models.Model):name = models.CharField(max_length=32)# 优点, 第三张表不需要你自己创建 ,还支持orm的各种操作# 缺点:第三张表的扩展性很差 不支持额外添加字段# 存手动class Book(models.Model):anme = models.CharField(max_length=32)class Author(models.Model):name = models.CharField(max_length=32)class Book2Author(models.Model):book_id = models.ForeginKey(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) # books = models.ManyToManyField(to='Book', # through='Book2Author', # through_fields=('author','book') # )class Book2Author(models.Model): book = models.ForeignKey(to='Book') author = models.ForeignKey(to='Author')"""to='关联的表名'through='自己创建的第三张表'through_fields=(第三张表的字段)through_fields字段先后顺序当前表是谁, 就把对应的关联字段放在前面可以使用orm 的正反向查询, 但是没法使用add,set,remove, clear"""### AJAX```python异步提交, 局部刷新$('#btn').click(function () { // 朝后端发送ajax请求 $.ajax({ // 1.指定朝哪个后端发送ajax请求 url:'', // 不写就是朝当前地址提交 // 2.请求方式 type:'post', // 不指定默认就是get 都是小写 // 3.数据 {#data:{'username':'jason','password':123},#} data:{'i1':$('#d1').val(),'i2':$('#d2').val()}, // 4.回调函数:当后端给你返回结果的时候会自动触发 args接受后端的返回结果 success:function (args) { {#alert(args) // 通过DOM操作动态渲染到第三个input里面#} {#$('#d3').val(args)#} console.log(typeof args) } }) })# 后端使用JsonResponse返回数据, 回调函数会自动帮你反序列化 # 后端使用HttpResponse返回数据, 回调函数不会帮你反序列化 # 自己在前端利用JSON.parse() # 后端, json.dumps()