choices参数,Ajax操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | """ 用户表 性别 学历 工作经验 是否结婚 是否生子 客户来源 ... 针对某个可以列举完全的可能性字段,我们应该如何存储 只要某个字段的可能性是可以列举完全的,那么一般情况下都会采用choices参数 """ class User(models.Model): username = models.CharField(max_length = 32 ) age = models.IntegerField() # 性别 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 ) """ 该gender字段存的还是数字 但是如果存的数字在上面元祖列举的范围之内 那么可以非常轻松的获取到数字对应的真正的内容 1.gender 字段存的数字不在上述元祖列举的范围内容 2. 如果在 如何获取对应的中文信息 "" from app01 import models # 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) # 取 # user_obj = models.User.objects.filter(pk=1).first() # print(user_obj.gender) # 只要是choices参数的字段 如果你想要获取对应信息 固定写法 get_字段名_display() # print(user_obj.get_gender_display()) user_obj = models.User.objects. filter (pk = 4 ).first() # 如果没有对应关系 那么字段是什么还是展示什么 print (user_obj.get_gender_display()) # 4 |
MTV与MVC模型
1 2 3 4 5 6 7 8 9 | # MTV:Django号称是MTV模型 M:models T:templates V:views # MVC:其实django本质也是MVC M:models V:views C:controller # vue框架:MVVM模型 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | # 全自动:利用orm自动帮我们创建第三张关系表 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 ) """ 优点:代码不需要你写 非常的方便 还支持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 ) # 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' ) """ through_fields字段先后顺序 判断的本质: 通过第三张表查询对应的表 需要用到哪个字段就把哪个字段放前面 你也可以简化判断 当前表是谁 就把对应的关联字段放前面 半自动:可以使用orm的正反向查询 但是没法使用add,set,remove,clear这四个方法 """ # 总结:为了扩展性更高 一般我们都会采用半自动(写代码要给自己留一条后路) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | """ 异步提交 局部刷新 例子:github注册 动态获取用户名实时的跟后端确认并实时展示的前端(局部刷新) 朝发送请求的方式 1.浏览器地址栏直接输入url回车 GET请求 2.a标签href属性 GET请求 3.form表单 GET请求/POST请求 4.ajax GET请求/POST请求 AJAX 不是新的编程语言,而是一种使用现有标准的新方法(比较装饰器) AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。(这一特点给用户的感受是在不知不觉中完成请求和响应过程) Ajax我们只学习jQuery封装之后的版本(不学原生的 原生的复杂并且在实际项目中也一般不用) 所以我们在前端页面使用ajax的时候需要确保导入了jQuery ps:并不只有jQuery能够实现ajax,其他的框架也可以 但是换汤不换药 原理是一样的 """ |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | """ 页面上有三个input框 在前两个框中输入数字 点击按钮 朝后端发送ajax请求 后端计算出结果 再返回给前端动态展示的到第三个input框中 (整个过程页面不准有刷新,也不能在前端计算) """ $( '#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) } }) }) """ 针对后端如果是用HttpResponse返回的数据 回调函数不会自动帮你反序列化 如果后端直接用的是JsonResponse返回的数据 回调函数会自动帮你反序列化 HttpResponse解决方式 1.自己在前端利用JSON.parse() 2.在ajax里面配置一个参数 (后面再讲) """ |
分类:
Ddango
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律