【Python使用】嘿马云课堂web完整实战项目第3篇:增加数据,修改数据【附代码文档】

教程总体简介:项目概述 项目背景 项目的功能构架 项目的技术架构 CMS 什么是CMS CMS需求分析与工程搭建 静态门户工程搭建 SSI服务端包含技术 页面预览开发 4 添加“页面预览”链接 页面发布 需求分析 技术方案 测试 环境搭建 数据字典 服务端 前端 数据模型 页面原型 前端页面 上传图片开发 前端开发 图片查询 静态页面测试 CMS页面预览测试 CMS添加页面接口 搜索服务 搭建ES环境 后端工程搭建 导入CMS数据库 MongoEngine入门 在Django中使用MongoDB 定义文档 Logstash创建索引 创建搜索应用 定义ESClient 搜索前端技术需求 了解SEO 服务端渲染和客户端渲染 Nuxt.js入门 创建Nuxt工程 页面布局 路由 获取数据 搜索页面 查询全部 分页查询 按分类搜索 按难度等级搜索 集成测试 在线学习与媒资管理 在线学习需求分析 需求描述 视频点播解决方案 视频编码 FFmpeg的基本使用 生成m3u8/ts文件 播放器 搭建学习中心前端 媒资管理 开发环境 上传文件 断点续传解决方案 文件分块与合并 媒资服务端编写 视频处理 发送视频处理消息 我的媒资 选择视频 保存视频信息 Api接口 学习页面获取视频播放地址 在线学习接口 登录注册与认证授权 增加数据 修改数据 删除数据 查询数据 Q对象 其他 查询集 QuerySet 页面管理后端开发 接口说明 接口开发规范 JWT Django REST framework JWT 用户登录前端 前端显示当前用户 用户退出 前端集成认证授权 用户注册后端 订单与选课 分布式事务 问题描述 CAP理论 解决方案 自动添加选课方案 Celery Beat定时任务 订单服务定时发送消息 查询前N条任务 乐观锁取任务 RabbitMQ配置 学习服务添加选课 订单服务结束任务 传智云课堂 封装异常处理 封装JSON返回值 站点列表和模板列表接口 新增页面 页面查询接口定义 自定义条件查询 3 测试接口 页面详情 修改页面 删除页面 CMS前端工程创建 导入系统管理前端工程 单页面应用介绍 CMS前端页面查询开发 创建页面 Table组件测试 页面内容完善 跨域问题解决 进入页面立即查询 前后端请求响应流程小结 新增页面前端开发 页面处理流程 页面静态化及预览发布 页面静态化需求 模板管理 模板管理业务流程 模板制作 GridFS研究 模板存储

完整笔记资料代码:https://gitee.com/yinuo112/Backend/tree/master/Python/嘿马云课堂web完整实战项目/note.md

感兴趣的小伙伴可以自取哦~


全套教程部分目录:


部分文件图片:

增加数据

学习目标

  • 掌握增加数据的方法

1 增加数据

增加数据有两种方法。

1、save

通过创建文档类对象,执行对象的save()方法保存到数据库中。

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
>>> from datetime import date
>>> book = BookInfo(btitle='西游记',bpub_date=date(1988,1,1),bread=10,bcomment=10
)
>>> book.save()
>>> book.id    # 新增对象的id为一个ObjectId对象
ObjectId('5d677f75bffe27a8e83b6223')
>>> hero = HeroInfo(hname='孙悟空',hgender=0,hbook=book
)
>>> hero.save()
>>> hero2 = HeroInfo(hname='猪八戒',hgender=0,hbook=book.id
)
>>> hero2.save()

2、create

通过模型类.objects.create()保存。

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
>>> HeroInfo.objects.create(hname='沙和尚',hgender=0,hbook=book
)
<HeroInfo: 沙和尚>

2 小结

  • 增加数据有两种方法

  • 通过创建文档类对象,执行对象的save()方法

  • 通过模型类.objects.create()保存

修改数据

学习目标

掌握修改数据的方法

1 修改数据

修改数据有两种方法

1、save

修改模型类对象的属性,然后执行save()方法

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
hero = HeroInfo.objects.get(hname='猪八戒')
hero.hname = '猪悟能'
hero.save()

2、update

使用模型类.objects.filter().update(),会返回受影响的行数

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
HeroInfo.objects.filter(hname='沙悟净').update(hname='沙僧')

2 小结

  • 修改更新有两种方法

  • 修改模型类对象的属性,然后执行save()方法

  • 使用模型类.objects.filter().update()

删除数据

学习目标

  • 掌握删除数据的方法

1 删除数据

删除有两种方法

1、文档类对象.delete()

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
>>> hero = HeroInfo.objects.get(hname='猪悟能')
>>> hero.delete()

2、文档类.objects.filter().delete()

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
>>> HeroInfo.objects.filter(hname='沙悟净').delete()

2 小结

  • 删除有两种方法

  • 文档类对象.delete()

  • 文档类.objects.filter().delete()

查询数据

学习目标

  • 掌握基本查询方法
  • 掌握对结果集进行过滤的方法

1 基本查询

get 查询单一结果,如果不存在会抛出文档类DoesNotExist异常。

all 查询多个结果。

count 查询结果数量。

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
>>> BookInfo.objects.all()
[<BookInfo: 射雕英雄传>, <BookInfo: 天龙八部>, <BookInfo: 笑傲江湖>, <BookInfo: 雪山飞狐>, <BookInfo: 西游记>]
>>> book = BookInfo.objects.get(btitle='西游记')
>>> book.id
ObjectId('5d677f75bffe27a8e83b6223')>>> BookInfo.objects.get(id='5d6772e94bd611a8efe98c14')
<BookInfo: 笑傲江湖>
>>> BookInfo.objects.get(pk='5d6772e94bd611a8efe98c14')
<BookInfo: 笑傲江湖>
>>> BookInfo.objects.get(id='5d6772e94bd611a8efe98c54')
Traceback (most recent call last):File "<console>", line 1, in <module>File "/Users/apple/workspace/virtualenv/vue_shop/lib/python3.6/site-packages/mongoengine/queryset/base.py", line 272, in getraise queryset._document.DoesNotExist(msg)
cms.test_models.DoesNotExist: BookInfo matching query does not exist.>>> BookInfo.objects.count()
6

2 过滤查询

要对结果集进行过滤,可使用如下方法:

  • filter 过滤出多个结果
  • exclude 排除掉符合条件剩下的结果
  • get 过滤单一结果
  • 直接在文档类.objects()中传入过滤条件

对于过滤条件的使用,上述几个方法相同,故仅以filter进行讲解。

过滤条件的表达语法如下:

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
属性名称__比较运算符=# 属性名称和比较运算符间使用两个下划线,所以属性名不能包括多个下划线
1、比较查询
  • ne 不等于(not equal to)
  • gt 大于 (greater than)
  • gte 大于等于 (greater than or equal to)
  • lt 小于 (less than)
  • lte 小于等于 (less than or equal to)
2、范围查询
  • in 是否包含在范围内。
  • nin 是否不包含在范围内。
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
>>> BookInfo.objects.filter(btitle__in=['西游记', '雪山飞狐', '天龙八部'])
3、字符串查询
  • exact – 与指定值完全匹配
  • contains – 包含指定值
  • startswith – 以指定值开始
  • endswith – 以指定值结束
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
>>> BookInfo.objects.filter(btitle__contains='传')
>>> BookInfo.objects.filter(btitle__endswith='部')

3 小结

  • 基础查询

  • get 查询单一结果

  • all 查询多个结果

  • count 查询结果数量

  • 过滤查询

  • 过滤条件的表达语法:属性名称__比较运算符=值

  • 比较查询:ne、gt、gte、lt、lte
  • 范围查询:in、nin
  • 字符串查询:exact、contains、startswith、endswith

Q对象

学习目标

  • 掌握Q对象的使用方法

1 Q对象

多个过滤器逐个调用表示逻辑与关系。

例:查询阅读量大于20,并且评论量小于30的图书。

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
>>> BookInfo.objects.filter(bread__gt=20, bcomment__lt=30)

>>> BookInfo.objects.filter(bread__gt=20).filter(bcomment__lt=30)

如果需要实现逻辑或or的查询,需要使用Q()对象结合|运算符

语法如下:

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Q(属性名__运算符=)

例:查询阅读量大于20的图书,改写为Q对象如下。

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
>>> from mongoengine import Q
>>> BookInfo.objects.filter(Q(bread__gt=20))

Q对象可以使用&、|连接,&表示逻辑与,|表示逻辑或。

例:查询阅读量大于20,或评论量小于30的图书,只能使用Q对象实现

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
>>> BookInfo.objects.filter(Q(bread__gt=20)|Q(bcomment__lt=30))

MongoEngine中的Q对象前不可以使用~操作符。

2 小结

  • 语法如下:Q(属性名__运算符=值)
  • Q对象可以使用&、|连接,&表示逻辑与,|表示逻辑或

其他

学习目标

  • 掌握常用聚合函数的用法
  • 掌握排序的用法
  • 掌握关联查询的方法

1 聚合函数

常用的聚合函数有count 计数,sum 求和,average 求平均值

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
>>> BookInfo.objects.count()
5
>>> BookInfo.objects.sum('bread')
136.0
>>> BookInfo.objects.average('bread')
27.2

2 排序

使用order_by对结果进行排序

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
>>> BookInfo.objects.order_by('bread')  # 升序
>>> BookInfo.objects.order_by('-bread')  # 降序

3 关联查询

1、由一到多的访问语法:

需要进行两步查询,例如:

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
>>> b = BookInfo.objects.get(btitle='雪山飞狐')
>>> HeroInfo.objects(hbook=b)

主要是因为MongoDB不支持连表

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
>>> HeroInfo.objects(hbook__btitle='西游记')
Traceback (most recent call last):File "/Users/apple/workspace/virtualenv/vue_shop/lib/python3.6/site-packages/mongoengine/queryset/transform.py", line 62, in queryfields = _doc_cls._lookup_field(parts)File "/Users/apple/workspace/virtualenv/vue_shop/lib/python3.6/site-packages/mongoengine/base/document.py", line 1017, in _lookup_field'__'.join(parts))
mongoengine.errors.LookUpError: Cannot perform join in mongoDB: hbook__btitle

2、由多到一的访问语法:

多对应的文档类对象.一对应引用字段属性名 例:

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
>>> h = HeroInfo.objects.get(hname='郭靖')
>>> h.hbook

3、访问一对应的文档类关联对象的id语法:

多对应的文档类对象.一对应引用字段属性名.id

例:

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
>>> h = HeroInfo.objects.get(hname='郭靖')
>>> h.hbook.id

4 小结

  • 常用的聚合函数

  • count 计数

  • sum 求和
  • average 求平均值

  • 使用order_by对结果进行排序.order_by('bread')是升序,.order_by('-bread')是降序

  • 关联查询

  • 由一到多的访问语法:需要进行两步查询,MongoDB不支持连表查询

  • 由多到一的访问语法:多对应的文档类对象.一对应引用字段属性名
  • 访问一对应的文档类关联对象的id语法:多对应的文档类对象.一对应引用字段属性名.id

查询集 QuerySet

学习目标

  • 了解查询集的概念
  • 熟悉查询集的基本操作

1 概念

查询集,也称查询结果集、QuerySet,表示从数据库中获取的对象集合。

当调用如下过滤器方法时,返回查询集(而不是简单的列表):

  • all():返回所有数据。
  • filter():返回满足条件的数据。
  • exclude():返回满足条件之外的数据。
  • order_by():对结果进行排序。

:文档类.objects也会返回包含所有数据的查询集

对查询集可以再次调用过滤器进行过滤,如

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
BookInfo.objects.filter(bread__gt=30).order_by('bpub_date')

也就意味着查询集可以含有零个、一个或多个过滤器。过滤器基于所给的参数限制查询的结果。

判断某一个查询集中是否有数据

  • 使用 len() 查看查询集的长度是否为0
  • 空的查询集相当于 False,可直接用于条件判断

2 限制查询集

可以对查询集进行取下标或切片操作,等同于sql中的limit和offset子句。

注意:不支持负数索引。

对查询集进行切片后返回一个新的查询集,不会立即执行查询。

如果获取一个对象,直接使用[0],等同于[0:1].get(),但是如果没有数据,[0]引发IndexError异常,[0:1].get()如果没有数据引发DoesNotExist异常。

示例:获取第1、2项,运行查看。

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
qs = BookInfo.all()[0:2]

可以通过first()方法获取查询集中的第一个元素,如果查询集为空,则返回None

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
>>> BookInfo.objects.filter(btitle='雪山飞狐').first()
<BookInfo: 雪山飞狐>
>>> print(BookInfo.objects.filter(btitle='飞狐外传').first())
None

3 小结

  • 查询集表示从数据库中获取的对象集合
  • all、filter、exclude、order_by等返回查询集
  • 可以对查询集进行取下标或切片操作
  • 可以通过first()方法获取查询集中的第一个元素

页面管理后端开发

使用MongoEngine定义接口

学习目标

  • 掌握使用MongoEngine定义接口的方法

前面我们了解了MongoEngine的基本使用方法,接下来我们看一下如何使用MongoEngine结合django-rest-framework-mongoengine实现接口的定义

1 定义序列化器

要使用MongoEngine文档对象作为model,需要继承rest_framework_mongoengine.serializers的DocumentSerializer来完成序列化器的定义

定义序列化器

booktest/serializer.py

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from rest_framework_mongoengine.serializers import DocumentSerializer
from booktest.models import BookInfo, HeroInfoclass BookInfoSerializer(DocumentSerializer):class Meta:model = BookInfofields = '__all__'class HeroInfoSerializer(DocumentSerializer):class Meta:model = HeroInfofields = '__all__'

2 定义视图集

视图集需要继承rest_framework_mongoengine.viewsets中的类作为基类

定义视图集

booktest/views.py

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from rest_framework_mongoengine.viewsets import ModelViewSet
from booktest.models import BookInfo, HeroInfo
from booktest.serializers import BookInfoSerializer, HeroInfoSerializerclass BookInfoViewSet(ModelViewSet):queryset = BookInfo.objectsserializer_class = BookInfoSerializerclass HeroInfoViewSet(ModelViewSet):queryset = HeroInfo.objectsserializer_class = HeroInfoSerializer

3 定义Router

使用MongoEngine文档对象相关的模型和序列化器定义的视图集,需要使用rest_framework_mongoengine.routers中的SimpleRouterDefaultRouter来定义Router(两个Router重写了get_default_base_name方法)

定义urls

booktest/urls.py

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from django.conf.urls import url, include
from rest_framework_mongoengine.routers import SimpleRouterfrom booktest.views import BookInfoViewSet, HeroInfoViewSetrouter = SimpleRouter()
router.register('book', BookInfoViewSet)
router.register('hero', HeroInfoViewSet)urlpatterns = [url(r'test/', include(router.urls)),
]
注册urls和应用

cz_study/urls.py

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import booktest.urlsurlpatterns = [...url(r'^', include(booktest.urls)),
]

cz_study/settings.py

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
INSTALLED_APPS = [...'booktest.apps.BooktestConfig',
]

4 测试接口

启动Django服务

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
python manage.py runserver

访问地址 [ 可以看到所有图书数据的列表,如下:

5 小结

  • 使用MongoEngine定义接口的方法

  • 定义序列化器:序列化器从rest_framework_mongoengine.serializers中继承

  • 定义视图集:视图集需要继承rest_framework_mongoengine.viewsets中的类作为基类
  • 定义router:需要使用rest_framework_mongoengine.routers中的SimpleRouterDefaultRouter来定义Router(两个Router重写了get_default_base_name方法)

接口说明

接口开发规范

学习目标

  • 了解项目的接口开发规范

1 接口开发规范

为了严格按照接口进行开发,提高效率,对请求及响应格式进行规范化。

1、get 请求时,使用querystring传参。

2、Post请求时,可以提交form表单数据(application/x-www-form-urlencoded)和Json数据(Content-Type=application/json),文件等多部件类型(multipart/form-data)三种数据格式,也可以在querystring中附加过滤、排序等参数。

3、响应结果统一信息为:是否成功、操作代码、提示信息及自定义数据。

4、响应结果统一格式为json。

参数类型是否必须说明
successbool是否成功
codeint状态码
messagestr状态信息
data对象数据对象

调用成功的返回值示例如下:

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{'success': True, 'code': 10000, 'message': '操作成功!', 'data': {'xxx': 'xxx', 'xxx': 'xxx'}}

调用失败的返回值示例如下:

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{'success': False, 'code': 11111, 'message': '操作失败!', 'data': {}}

为满足这一需求,我们需要对接口返回进行定制:

  1. 调用失败时,通过抛出异常返回错误信息
  2. 将所有JSON返回封装成约定的格式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/75668.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文笔记(七十五)Auto-Encoding Variational Bayes

Auto-Encoding Variational Bayes 文章概括摘要1 引言2 方法2.1 问题场景2.2 变分下界2.3 SGVB估计器与AEVB算法2.4 重参数化技巧 3 示例&#xff1a;变分自编码器&#xff08;Variational Auto-Encoder&#xff09;4 相关工作5 实验6 结论7 未来工作 文章概括 引用&#xff1…

Python3 学习笔记

Python3 简介 | 菜鸟教程 一 Python3 简介 Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性&#xff0c;相比其他语言经常使用英文关键字&#xff0c;其他语言的一些标点符号&#xff0c;它具有比其他语言更有特色…

Java实现N皇后问题的双路径探索:递归回溯与迭代回溯算法详解

N皇后问题要求在NN的棋盘上放置N个皇后&#xff0c;使得她们无法互相攻击。本文提供递归和循环迭代两种解法&#xff0c;并通过图示解释核心逻辑。 一、算法核心思想 使用回溯法逐行放置皇后&#xff0c;通过冲突检测保证每行、每列、对角线上只有一个皇后。发现无效路径时回退…

前端判断值相等的方法和区别

1. (宽松相等) 在比较之前会进行类型转换 可能导致一些意外的结果 0 // true 0 0 // true false 0 // true null undefined // true [1,2,3]1,2,3 // true2. (严格相等) 不进行类型转换 类型和值都必须相同 0 // false 0 0 // false false 0 /…

Socket编程UDP

Socket编程UDP 1、V1版本——EchoServer2、网络命令2.1、ping2.2、netstat2.3、pidof 3、验证UDP——Windows作为client访问Linux4、V2版本——DictServer5、V3版本——简单聊天室 1、V1版本——EchoServer 首先给出EchoServer目录结构&#xff1a;服务器的类我们实现在UdpServ…

辅助查询是根据查询到的文档片段再去生成新的查询问题

&#x1f4a1; 辅助查询是怎么来的&#xff1f; 它是基于你当前查询&#xff08;query&#xff09;检索到的某个文档片段&#xff08;chunk_result&#xff09;&#xff0c;再去“反推”出新的相关问题&#xff08;utility queries&#xff09;&#xff0c;这些问题的作用是&a…

2025 年 4 月补丁星期二预测:微软将推出更多 AI 安全功能

微软正在继续构建其 AI 网络安全战略&#xff0c;并于本月宣布在 Microsoft Security Copilot 中引入新代理。 他们引入了用于网络钓鱼分类的代理、用于数据丢失预防和内部风险管理的警报分类、条件访问优化、漏洞修复和威胁情报简报。 这些代理的目标是不断从这些不同学科中…

【LLM系列】1.大模型简介

1. 基础 1.1 如何权衡模型的复杂度和性能&#xff1f; ├── a. 模型架构选择 │ ├── 简化架构 │ │ └── 选择较小的网络层数和宽度&#xff0c;降低复杂度&#xff1b; │ │ 可使用高性能基础模型如 Transformers 作为起点&#xff0c;根据需求缩放模型。 │ └──…

【leetcode】记录与查找:哈希表的题型分析

前言 &#x1f31f;&#x1f31f;本期讲解关于力扣的几篇题解的详细介绍~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么废话不…

优选算法的妙思之流:分治——快排专题

专栏&#xff1a;算法的魔法世界 个人主页&#xff1a;手握风云 目录 一、快速排序 二、例题讲解 2.1. 颜色分类 2.2. 排序数组 2.3. 数组中的第K个最大元素 2.4. 库存管理 III 一、快速排序 分治&#xff0c;简单理解为“分而治之”&#xff0c;将一个大问题划分为若干个…

二叉树的ACM板子(自用)

package 二叉树的中序遍历;import java.util.*;// 定义二叉树节点 class TreeNode {int val; // 节点值TreeNode left; // 左子节点TreeNode right; // 右子节点// 构造函数TreeNode(int x) {val x;} }public class DMain {// 构建二叉树&#xff08;层序遍历方式&…

Linux常用命令详解:从基础到进阶

目录 一、引言 二、文件处理相关命令 &#xff08;一&#xff09;grep指令 &#xff08;二&#xff09;zip/unzip指令 ​编辑 &#xff08;三&#xff09;tar指令 &#xff08;四&#xff09;find指令 三、系统管理相关命令 &#xff08;一&#xff09;shutdown指…

Qt多线程从基础到性能优化

一、为什么需要多线程开发 现代应用程序的性能需求 CPU多核架构的有效利用 复杂任务的解耦与响应式界面保持 二、Qt线程创建四大方式 1. 继承QThread重写run() class WorkerThread : public QThread {void run() override {// 耗时操作qDebug() << "Thread ID…

【java】在 Java 中,获取一个类的`Class`对象有多种方式

在 Java 中&#xff0c;获取一个类的Class对象有多种方式。Class对象代表了 Java 中的一个类或接口的运行时类信息&#xff0c;可以用于反射操作。以下是获取Class对象的几种常见方法&#xff1a; 1.使用.class属性 每个类都有一个.class属性&#xff0c;可以直接获取该类的Cl…

什么是RPC通信

RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff09;通信是一种允许程序像调用本地函数一样调用远程服务器上函数的通信技术。它简化了分布式系统中的网络交互&#xff0c;隐藏了底层网络通信的复杂性&#xff0c;使开发者能够专注于业务逻辑。 一、RPC…

还是主题混合程序设计

以下是针对您现有代码的完整主题化改造方案&#xff0c;实现跨QML/Qt Widgets的阴影主题系统&#xff1a; 一、主题管理系统核心 // thememanager.h #pragma once #include <QObject> #include <QColor> #include <QMap> #include <QQmlEngine>class…

BT-Basic函数之首字母T

BT-Basic函数之首字母T 文章目录 BT-Basic函数之首字母Ttabtesttest conttest monitortest on boardstest scanworkstest shortstesthead cleanuptesthead configurationtesthead istesthead power on/offtesthead statustestjet print level istestordertestplan generationth…

7-9 趣味游戏

题目解析 在某个学校的趣味游戏活动中&#xff0c;N 名同学站成一排&#xff0c;他们的年龄恰好是 1 到 N &#xff0c;需要注意的是他们并不是按照年龄的大小排列的&#xff0c;而是随机排列的。 游戏的规则是请同学们快速计算出&#xff0c;如果在这 N 名同学的小组中&…

Hugging Face模型微调训练(基于BERT的中文评价情感分析)

文章目录 学习视频地址项目地址数据集的下载模型微调的基本概念与流程加载数据集数据集格式数据集信息 制作Dataset数据集字段数据集信息 vocab字典操作词汇表文本转换 下游任务模型设计模型训练与保存数据加载优化器训练循环 最终效果评估与测试模型加载和测试 学习视频地址 …

【蓝桥杯】十五届省赛B组c++

目录 前言 握手问题 分析 排列组合写法 枚举 小球反弹 分析 代码 好数 分析 代码 R 格式 分析 代码 宝石组合 分析 代码 数字接龙 分析 代码 拔河 分析 代码 总结 前言 主播这两天做了一套蓝桥杯的省赛题目&#xff08;切实感受到了自己有多菜&#x…