多对多的创建方式与Ajax
模型层补充
MTV与MVC模型
'''
MTV 全称 Models Templates Views 模型模板视图
MVC 全称 Models Views Controller 模型视图控制MTV: Django号称是MTV模型
MVC: 其实django本质也是MVC
拓展: vue框架:MVVM模型
'''
choices参数(数据库字段设计常见)
choices使用
class User(models.Model):username = models.CharField(max_length=32)age = models.IntegerField()"""作用: 针对可以被预测到结果的字段对应的数据, 那么可以为该字段定制choices参数, 取数据的时候就可以通过`对象.get_设置choices的字段_display()`获取到定制的数据.例如: 性别 学历 工作经验 是否结婚 是否生子 客户来源等等. 针对某个可以列举完全的可能性字段我们用choices存储.使用: 1. 为即将创建的字段定制choices参数. 参数是一个二元组的形式 ((), ()). 元组中第一个参数要满足存储字段的约束条件2. 存: 指定对设置了choices的字段存数据数据存得时候没有列举出来的数字也能存. 范围还是按照字段类型决定3. 取: 指定对设置了choices的字段取数据. 方法: 对象.get_设置choices的字段_display()如果取得时候如果没有对应关系 那么字段是什么还是展示什么"""# 性别gender_choices = ((0, '女'),(1, '男'),(2, '其他'),)gender = models.IntegerField(choices=gender_choices)# 成绩score_choices = (('A', '优秀'),('B', '良好'),('C', '及格'),('D', '不合格'),)# 保证字段类型跟列举出来的元祖第一个数据类型一致即可score = models.CharField(choices=score_choices, null=True)user_obj1 = 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)
# 存: 存的时候 没有列举出来的数字也能存(范围还是按照字段类型决定)
user_obj4 = models.User.objects.create(username='tony', age=45, gender=4)# 取: 只要是choices参数的字段 如果你想要获取对应信息 固定写法 get_字段名_display()
print(user_obj1.get_gender_display()) # 男
print(user_obj4.get_gender_display()) # 4 (如果没有对应关系 那么字段是什么还是展示什么)
多对多三种创建方式
1. 全自动
'''
优点: 1. 第三张表以及对应的外键关联字段不需要书写.2. 可以使用ORM提供的多对多关系表之间的增删改查清空方法remove,add,set,clear和正反向+双下划线查询
缺点: 可扩展性极差. 无法对ORM自动生成的第三种虚拟中间表进行增添字段的操作
'''
class Book(models.Model):name = models.CharField(max_length=32)book = models.ManyToManyField(to='Author')class Author(models.Model):name = models.CharField(max_length=32)
2. 纯手动
'''
优点: 可扩展性强: 第三张表完全取决于自己
缺点: 需要书写的代码量大. 并且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')
3. 半自动
'''
优点: 既可以对第三张表进行格外增添字段的操作, 又能使用ORM提供的正反向+双下划线查询
缺点: 不能使用ORM提供的多对多表关系增删改清空方法. add, set, remove, clearManyToManyField中参数指定介绍: to: 需要建立多对多外键关系的表. 本来需要指定to_field, 但是默认关联的就是被关联表的主键, 因此不需要指定.through: 建立多对多关系的第三张表through_fields: 指定元组形式注意: 参数的指定有顺序判断顺序指定的本质: 通过第三张表反向查对应建立多对多外键关联的表需要用到的哪个字段 哪个字段就放在前面简化: 谁是建立多对多外键关联的表, 就把对应的关联字段放前面
'''
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')
Ajax
Ajax简介
1. 简介
'''
AJAX 全称 Asynchronous JavaScript and XML 异步JavaScript和XML
特点是: 异步提交. 局部刷新
例如: github注册页面动态获取用户名实时的跟后端确认并实时展示的前端(局部刷新) 1. AJAX 不是新的编程语言,而是一种使用现有标准的新方法(比较装饰器)
2. AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。(这一特点给用户的感受是在不知不觉中完成请求和响应过程)
3. 注意: Ajax我们只争对jQuery封装之后的版本(原生的复杂并且在实际项目中也一般不用)
补充: 并不只有jQuery能够实现ajax,其他的框架也可以 但是换汤不换药 原理是一样的
'''
2. 前端朝后端发送请求的方式
'''
1. 浏览器地址栏直接输入url回车 GET请求
2. a标签href属性 GET请求
3. form表单(:submit 和 button) GET请求/POST请求
4. ajax GET请求/POST请求
'''
Ajax常见应用情景
# 需求
'''
1. 页面上有三个input框
2. 在前两个框中输入数字 点击按钮 朝后端发送ajax请求
3. 后端计算出结果 再返回给前端动态展示的到第三个input框中
强调: 整个过程页面不准有刷新,也不能在前端计算
'''
1. 前端: templates下的ab_ajax.html
<body>
<input type="text" id="d1"> +
<input type="text" id="d2"> =
<input type="text" id="d3">
<p><button class="btn btn-success btn-xs">点我</button>
</p><script>$(".btn").click(function () {// 1. 朝后端发送ajax请求$.ajax({// 2.指定朝哪个后端发送ajax请求url: '', // 不写就是朝当前地址提交// 2.请求方式type: 'post', // 不指定默认就是get 都是小写// 3.数据data: {'d1': $("#d1").val(), 'd2': $("#d2").val()},// 4.自动将接收到后端的string类型的json格式, 反序列化转换成对象. 如果后端指定使用JsonResponse返回数据. 那么就无需指定.{#dataType: 'json',#}// 5.回调函数:当后端给你返回结果的时候会自动触发 args接受后端的返回结果success: function (args) {// 6. 通过DOM操作动态渲染到第三个input里面$("#d3").val(args);console.log(typeof args);},})})
</script>
</body>
2. 后端: views.py
# 提示: 因为ajax指定的是post提交方式, 我们需要到settings.py中注释掉MIDDLEWARE中的csrf那一行. 如果没有注释前端将会出现如下异常:
'''
Failed to load resource: the server responded with a status of 403 (Forbidden)加载资源失败:服务器响应状态为403(禁止)
'''def ab_ajax(request):if request.method == "POST":# 1. 使用HttpResponse返回数据. 实现后端计算出结果 再返回给前端动态展示的到第三个input框中'''d1 = request.POST.get('d1')d2 = request.POST.get('d2')sum = int(d1) + int(d2)return HttpResponse(sum)'''# 2. 使用HttpResponse返回数据. 传字典格式需要使用jason序列化. ajax中指定dataType:'json'设置自动反序列化. 如果前端页面手动指定反序列化需要使用JSON.parse. 如果没有指定是string类型, 而不是一个对象.'''import jsonusername = {'username': 'jason', 'password': '123'}return HttpResponse(json.dumps(username))'''# 3. 使用JsonResponse返回数据. 前端无需反序列化. 可以直接拿到数据对象from django.http import JsonResponseusername = {'username': 'jason', 'password': '123'}return JsonResponse(username)return render(request, 'ab_ajax.html')相关文章:
多对多的创建方式与Ajax
模型层补充 MTV与MVC模型 MTV 全称 Models Templates Views 模型模板视图 MVC 全称 Models Views Controller 模型视图控制MTV: Django号称是MTV模型 MVC: 其实django本质也是MVC 拓展: vue框架:MVVM模型choices参数(数据库字段设计常见) choices使用 class User(models.Mod…...
【Linux网络】详解使用http和ftp搭建yum仓库,以及yum网络源优化
目录 一、回顾yum的原理 1.1yum简介 yum安装的底层原理: yum的好处: 二、学习yum的配置文件及命令 1、yum的配置文件 2、yum的相关命令详解 3、yum的命令相关案例 三、搭建yum仓库的方式 1、本地yum仓库建立 2、通过http搭建内网的yum仓库 3、…...
算法设计与分析算法实现——动态规划最大子段
输入:整数序列a1,a2,…,an 输出:序列的一个子段,其和Σak最大 注意:当所有整数都为负数时,定义最大子段和为0 使用动态规划,输入数组是a[n]; 状态转移方程dp[i]max(dp[i-1]a[i],a[i])——这个状…...
JavaWeb-JVM内存管理机制
JavaWeb-JVM内存管理机制 一、JVM内存管理概述1.1 什么是JVM内存管理1.2 物理内存与虚拟内存1.3 内核空间与用户空间二、java中哪些组建需要使用内存2.1 Java堆2.2 线程2.3 类和类加速器2.4 NIO2.5 JNI三、JVM内存结构3.1 PC寄存器3.2 Java栈3.3 堆3.4 方法区3.5 运行时常量池3…...
阿里云oss存储文件上传功能实现(保姆级教程)
先登录: 点击进入控制台 点击左上角导航栏按钮 搜索oss,点击进入 进入之后点击立即开通oss按钮,开通之后点击下图立即创建,弹出创建Bucket 填上Bucket名称,读写权限改为公共读。其他不变点击确定创建,完成…...
centos7配置 局域网自动解析hostname
这样可以让局域网别的电脑直接通过hostname来连接这台电脑。 如果不是windows系统,可以用hostname.local来连接 主要是用到了mdns的功能,需要安装nss-mdns。 vmware下nat模式下,宿主机也可以通过连接hostname使用。 yum install epel-releas…...
wireshark 过滤设置
gpt: Wireshark 是一个网络分析工具,可以用来捕获和分析网络数据包。你可以使用过滤器来筛选并查看你感兴趣的数据包。Wireshark 使用的是基于BPF(Berkeley Packet Filter)语法的过滤器。以下是一些常见的 Wireshark 过滤器设置:…...
SpringBoot-过滤器Filter+JWT令牌实现登录验证
登录校验-Filter 分析 过滤器Filter的快速入门以及使用细节我们已经介绍完了,接下来最后一步,我们需要使用过滤器Filter来完成案例当中的登录校验功能。 我们先来回顾下前面分析过的登录校验的基本流程: 要进入到后台管理系统,我…...
VMware——WindowServer2012R2环境安装mysql5.7.14解压版_互为主从(图解版)
目录 一、服务器信息二、192.168.132.35服务器上安装mysql(主)2.1、环境变量配置2.2、安装2.2.1、修改配置文件内容2.2.2、初始化mysql并指定超级用户密码2.2.3、安装mysql服务2.2.4、启动mysql服务2.2.5、登录用户管理及密码修改2.2.6、开启远程访问 三…...
python 实现蚁群算法(simpy带绘图)
这里使用了蚁群算法求解了旅行商问题,同时结合了simpy来绘图 选择下一个食物的函数为: probability[i] pheromone[self.now][self.not_to_foods[i]] ** pheromone_w (1 / distance[self.now][self.not_to_foods[i]]) ** distance_w 该条路概率权重该点…...
OpenAI 董事会宫斗始作俑者?一窥伊尔亚·苏茨克维内心世界
OpenAI 董事会闹剧应该是暂告一个段落了,Sam Altman和Greg Brockman等一众高管均已加入微软,还有员工写联名信逼宫董事会的戏码,关注度已经降下来了。 但是,这场宫斗闹剧的中心人物Ilya Sutskever大家关注度不算太高。他本人是纯粹的技术男,极少抛头露面透露其内心世界。…...
Android App 启动状态有几种?
startup state Android 启动状态(startup state)1.1、冷启动(Cold Start)1.2、温启动(Warm Start)1.3、热启动(Hot Start)1.4、后台启动(Background Start) 优…...
Spring Cloud Alibaba Sentinel 简单使用
Sentinel Sentinel 主要功能Sentinel 作用常见的流量控制算法计数器算法漏桶算法 令牌桶算法Sentinel 流量控制Sentinel 熔断Sentinel 基本使用添加依赖定义资源定义限流规则定义熔断规则如何判断熔断还是限流自定义 Sentinel 异常局部自定义异常全局自定义异常系统自定义异常…...
nvm切换node后,没有npm
当我们想要在不同的 Node.js 版本之间切换的时候,通常会使用 nvm(Node Version Manager) 来完成。但是,当我们在使用 nvm 切换 Node.js 版本的时候,可能会遇到没有 npm 的情况。这种情况通常发生在我们在新环境或者重新…...
Redis-高性能原理剖析
redis安装 下载地址:http://redis.io/download 安装步骤: # 安装gcc yum install gcc# 把下载好的redis-5.0.3.tar.gz放在/usr/local文件夹下,并解压 wget http://download.redis.io/releases/redis-5.0.3.tar.gz tar -zxvf redis-5.0.3.tar…...
ORA-00600 【3948】,ORA-00600 【3949】
前言 这个报错没有从ORA600那个tool中查到。 回顾 环境 环境是windows 11203 rac环境,非归档数据库 有部分数据文件建到了本地文件系统。目标是将部分数据文件通过switch to copy的形式移动到diskgroup里 流程 srvctl关闭双节点, 启动单节点到moun…...
flink 查看写入starrocks的数据量 总行数
针对该connector: https://github.com/StarRocks/docs.zh-cn/blob/main/loading/Flink-connector-starrocks.md...
全链路压测的步骤及重要性
全链路压测是一种系统性的性能测试方法,旨在模拟真实用户场景下的完整操作流程,全面评估软件系统在不同压力下的性能表现。这种测试方法对于保证应用程序的高可用性、稳定性和可扩展性至关重要。 1. 全链路压测概述 全链路压测是在模拟实际用户使用场景的…...
使用Python实现几种底层技术的数据结构
使用Python实现几种底层技术的数据结构 数据结构(data structure)是带有结构特性的数据元素的集合,它研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系,并对这种结构定义相适应的运算,设计出相应的算法,并确保经过这…...
前端面试题【72道】
文章目录 1. 说说你对盒子模型的理解2. css选择器有哪些?优先级?哪些属性可以继承?3. 元素水平垂直居中的方法有哪些?如果元素不定宽高呢?4. 怎么理解回流跟重绘?什么场景下会触发?5. 什么是响应…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
HTML前端开发:JavaScript 获取元素方法详解
作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...
