Django基础6——数据模型关系

文章目录

  • 一、基本了解
  • 二、一对一关系
  • 三、一对多关系
    • 3.1 增删改查
    • 3.2 案例:应用详情页
    • 3.2 案例:新建应用页
  • 四、多对多关系
    • 4.1 增删改查
    • 4.2 案例:应用详情页
    • 4.3 案例:部署应用页

一、基本了解

常见数据模型关系:

  • 一对一(one-to-one),OneToOneField。一个表中的每条记录对应另一个表中的每条记录,使用OneToOneField建立关系。
  • 一对多,多对一(one-to-many),ForeignKey
  • 多对多(many-to-many),ManyToManyField
  • 所谓的一对一、一对多,是指数据库中的表之间的关系。

二、一对一关系

  • 应用场景:当一张表想扩展字段,最常用的方式就是在这个表添加一个对一关系,创建第二张表,第二张表的id字段余第一张表的id字段关联在一起,以此起到一对一。

1.修改模型类文件myapp/models.py,新增一个类,创建第二张表。

class IdCard(models.Model):number = models.CharField(max_length=20, verbose_name="身份证号")address = models.CharField(max_length=50, default="武汉")user = models.OneToOneField(User,on_delete=models.CASCADE) # 定义一对一的模型关系

2.生成迁移文件,并同步。

python manage.py makemigrations
python manage.py migrate

3.添加数据。

#####################################################
##往已有数据的myapp_user表中添加新数据,该条新数据中包含身份证号、地址信息。
user_obj = User.objects.create(user='alan',name='阿兰',sex='女',age='25',label="运营,漂亮,喜欢购物")    ##先往母表myapp_user表中添加。
IdCard.objects.create(user=user_obj, number="456789", address="北京")    ##再往子表myapp_idcard表中添加,此处的user是模型类中定义的user。#####################################################
##向已有用户添加身份证信息
user_obj = User.objects.get(user="qingjun")
IdCard.objects.create(user=user_obj,number="123456789", address="杭州")

在这里插入图片描述
在这里插入图片描述
4.查询数据。

#####################################################
反向查询:通过用户查到身份证信息(user->idcard)
user = User.objects.get(user="qingjun") 
print(user.idcard.number)
print(user.idcard.address)#####################################################
正向查询:从身份证表查用户(idcard->user)
idcard = IdCard.objects.get(user_id=1) 
print(idcard.user.user)
print(idcard.user.name)

在这里插入图片描述
在这里插入图片描述
5.修改数据。

user_obj = User.objects.get(user="qingjun")
#####################################################
# 修改子表中的身份证信息
user_obj.idcard.address="河南"
user_obj.idcard.save()
#####################################################
# 修改母表中的用户信息
user_obj.age = 38
user_obj.save()

在这里插入图片描述
6.删除数据。

##删除“阿兰”用户的所有信息,包括子表中的“身份证号”、“地址”
User.objects.filter(user="alan").delete()

在这里插入图片描述

三、一对多关系

  • 一对一是表与表之间的关系,而一对多、多对多是表与表中数据的关系。

  • 一对多:A表中的某个记录对应B表中的多条记录,使用ForeignKey建立关系。

  • 应用场景:项目部署涉及表,项目表、应用表、服务器表等等。

    • 一对多:一个项目有多个应用,一个应用只能属于一个项目。
    • 多对多:一个应用部署到多台服务器,一个服务器部署多个应用。
      在这里插入图片描述

3.1 增删改查

1.修改模型类文件myapp/models.py,新增模型类,创建项目中的三张表。

##第一张表,项目表。
class Project(models.Model):name = models.CharField(max_length=30)describe = models.CharField(max_length=100, null=True)datetime = models.DateTimeField(auto_now_add=True)def __str__(self):return self.nameclass Meta:db_table = 'project'verbose_name_plural ='项目'##第二张表,应用表。
class App(models.Model):name = models.CharField(max_length=30)describe = models.CharField(max_length=100, null=True)datetime = models.DateTimeField(auto_now_add=True)project = models.ForeignKey(Project, on_delete=models.CASCADE) # 定义一对多的模型关系def __str__(self):return self.nameclass Meta:db_table = 'app'verbose_name_plural ='应用'##第三张表,服务器表。
class Server(models.Model):hostname = models.CharField(max_length=30)ip = models.GenericIPAddressField()describe = models.CharField(max_length=100, null=True)def __str__(self):return self.hostnameclass Meta:db_table = 'server'verbose_name_plural ='服务器'

2.生成迁移文件,并同步,查看数据库表。

python manage.py makemigrations
python manage.py migrate

在这里插入图片描述

3.新增数据。

from myapp.models import Project,App
#######################################################################
往项目表中插入数据,添加已知的项目名称、项目描述信息。
Project.objects.create(name="电商项目",describe="电商项目描述...")
Project.objects.create(name="在线教育项目",describe="在线教育项目描述...")
Project.objects.create(name="大数据项目",describe="大数据项目描述...")
#######################################################################
往应用表中插入信息,将应用表与项目表关联在一起。
project_obj = Project.objects.get(name="电商项目")
App.objects.create(name="product",describe="商品服务",project=project_obj)
project_obj = Project.objects.get(name="大数据项目")
App.objects.create(name="search",describe="搜索服务",project=project_obj)
project_obj = Project.objects.get(name="电商项目")
App.objects.create(name="order",describe="订单服务",project=project_obj)

在这里插入图片描述
4.查询数据。

#######################################################################
正向查询:通过应用名称查询所属项目(app->project)
##查询某个应用所属项目。
app = App.objects.get(name="product") # 获取应用
app.project.name # 根据获取的应用,查询对应项目名称
##查询所有应用所属项目。
app_list = App.objects.all()
for i in app_list:print(i.name, i.project.name, i.project.describe)
#######################################################################
反向查询:通过项目名称查询有哪些应用(project->app)
##查询某个项目有哪些应用:
project = Project.objects.get(name="电商项目") # 获取项目
project.app_set.all() # 根据获取的项目,查询所有应用
##查询所有项目有哪些引用:
project = Project.objects.all()
for i in project:print(i.name, i.app_set.all())	

在这里插入图片描述

3.2 案例:应用详情页

1.前端正向查询,查应用数据。

###################################################
1.定义根路由规则,ORM/urls.py
from django.urls import path,include,re_path
urlpatterns = [path('myapp/',include('myapp.urls')),
]
###################################################
2.定义子路由规则,ORM/myapp/urls.py
from django.urls import path
from myapp import views
urlpatterns = [path('app',views.app)
]
###################################################
3.定义视图,ORM/myapp/views.py
from django.shortcuts import render
from myapp.models import Project,App
def app(request):app = App.objects.all()return render(request, "app.html", {'app': app})
###################################################
4.定义html模板,templates/app.html    
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>项目表单</title>
</head>
<body>
<table border="1"><thead><tr><th>应用名称</th><th>应用描述</th><th>所属项目</th></tr></thead><tbody>{% for i in app %}<tr><td>{{ i.name }}</td><td>{{  i.describe }}</td><td>{{ i.project.name}}</td></tr>{% endfor %}</tbody>
</body>
</html>

在这里插入图片描述
2.前端反向查询,查项目数据。

###################################################
1.定义根路由规则,ORM/urls.py
from django.urls import path,include,re_path
urlpatterns = [path('myapp/',include('myapp.urls')),
]
###################################################
2.定义子路由规则,ORM/myapp/urls.py
from django.urls import path
from myapp import views
urlpatterns = [path('project',views.project),
]
###################################################
3.定义视图,ORM/myapp/views.py
from django.shortcuts import render
from myapp.models import Project,App
def project(request):project_list = Project.objects.all()return render(request, "project.html", {"project_list": project_list})
###################################################
4.定义html模板,templates/project.html    
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>项目表单</title>
</head>
<body>
<table border="1"><thead><tr><th>项目名称</th><th>项目描述</th><th>所有应用</th></tr></thead><tbody>{% for i in project_list %}<tr><td>{{ i.name }}</td><td>{{ i.describe }}</td><td>{% for n in i.app_set.all %}{{ n }}{% endfor %}</td></tr>{% endfor %}</tbody>
</body>
</html>

在这里插入图片描述

3.2 案例:新建应用页

  • 新建应用页:页面可添加应用并可选项目。

1.前端添加新应用,后端数据入库。

###################################################
1.定义根路由规则,ORM/urls.py
from django.urls import path,include,re_path
urlpatterns = [path('myapp/',include('myapp.urls')),
]
###################################################
2.定义子路由规则,ORM/myapp/urls.py
from django.urls import path
from myapp import views
urlpatterns = [path('app_add',views.app_add),
]
###################################################
3.定义视图,ORM/myapp/views.py
from django.shortcuts import render
from myapp.models import Project,App
def app_add(request):if request.method == "GET":project_list = Project.objects.all()return render(request,'app_add.html', {"project_list": project_list})elif request.method == "POST":app_name = request.POST.get("app-name")app_describe = request.POST.get("app-describe")project_name = request.POST.get("project-name")project_list = Project.objects.all()if not app_name:msg = "添加字段异常"return render(request, 'app_add.html', {'project_list': project_list, 'msg': msg})try:project_obj = Project.objects.get(name=project_name)App.objects.create(name=app_name, describe=app_describe, project=project_obj)msg ="添加成功"code = 0except:msg ="添加失败"code = 1return render(request, 'app_add.html', {'project_list': project_list, 'msg': msg,'code':code})
###################################################
4.定义html模板,templates/app_add.html    
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>创建应用</title>
</head>
<body>
<form action="" method="post">应用名称 : <input type="text" name="app-name"><br>应用描述 : <input type="text" name="app-describe"><br>所属项目 :<select name="project-name" id="">{% for i in project_list %}<option value="{{ i.name }}">{{ i.name }}</option>{% endfor %}</select><br><button type="submit">创建</button><button type="reset">清空</button>{{ msg }}
</form>
</body>
</html>

2.前端页面添加新应用。
在这里插入图片描述

四、多对多关系

  • 多对多:A表中的某个记录对应B表中的多条记录,B表中的某个记录对应A表中多条记录。使用ManyToManyField建立关系。过程中,Django会自动创建一个表来管理多对多关系,称为中间表;这个中间表的名称使用多对多的名称和包含这张表的模型的名称生成,也可以使用db_table选项指定这个中间表名称。
    在这里插入图片描述

  • 应用场景:一个应用部署到多台服务器,一个服务器部署多个应用。
    在这里插入图片描述

4.1 增删改查

1.修改模型类文件myapp/models.py,将server表和app表进行关联。

##第三张表,服务器表。
class Server(models.Model):hostname = models.CharField(max_length=30)ip = models.GenericIPAddressField()describe = models.CharField(max_length=100, null=True)app = models.ManyToManyField(App)           ##添加此行。def __str__(self):return self.hostnameclass Meta:db_table = 'server'verbose_name_plural ='服务器'

2.生成迁移文件,并同步,查看中间表。

python manage.py makemigrations
python manage.py migrate

在这里插入图片描述
3.往server表添加数据。

from myapp.models import App,Project,Server
Server.objects.create(hostname="ec-test1", ip="192.168.1.10", describe="电商项目测试服务器1")
Server.objects.create(hostname="ec-test2", ip="192.168.1.11", describe="电商项目测试服务器2")
Server.objects.create(hostname="bigdata-test1", ip="192.168.1.11", describe="大数据项目测试服务器1")

在这里插入图片描述
4.将一个新应用部署到指定服务器信息,添加到数据库中。

project_obj = Project.objects.get(name="电商项目")
app = App.objects.create(name="portal",describe="前端服务",project=project_obj)
server = Server.objects.get(hostname="ec-test1")
server.app.add(app)

在这里插入图片描述
5.查询数据。

#######################################################################
正向查询:查询服务器部署了哪些应用(server->app)
##查询某台服务器部署了哪些应用:
server = Server.objects.get(hostname="ec-test1")
server.app.all()
##查询所有服务器部署了哪些应用:
server_list = Server.objects.all()
for i in server_list:print(i.hostname, i.app.all())
#######################################################################
反向查询:查看某个应用部署到哪些服务器(app->server)
##查询某个应用部署到哪些服务器:
app = App.objects.get(name="portal")
app.server_set.all()
##查询所有应用部署到哪些服务器:
app_list = App.objects.all()
for i in app_list:print(i.name, i.server_set.all())

6.根据已存在的app信息,将其添加到服务器表中。

##获取应用表中的app_id字段进行关联。
app = App.objects.get(name="qingjun")
app.id
server = Server.objects.get(hostname="bigdata-test1") 
server.app.add(3)    #将应用id3关联该服务器。
server.app.add(1,2,3)    #将应用id1、2、3关联该服务器。

在这里插入图片描述
7.删除,将id=3的应用与ec-test1服务器取消关联。

server = Server.objects.get(hostname="ec-test1") 
server.app.remove(3) 

在这里插入图片描述
8.清空,将ec-test1服务器取消所有应用关联。

server = Server.objects.get(hostname="ec-test1") 
server.app.clear()

在这里插入图片描述

4.2 案例:应用详情页

1.前端正向查询。

###################################################
1.定义根路由规则,ORM/urls.py
from django.urls import path,include,re_path
urlpatterns = [path('myapp/',include('myapp.urls')),
]
###################################################
2.定义子路由规则,ORM/myapp/urls.py
from django.urls import path
from myapp import views
urlpatterns = [path('server',views.server),
]
###################################################
3.定义视图,ORM/myapp/views.py
from django.shortcuts import render
from myapp.models import Project,App,Server
def server(request):server_list = Server.objects.all()return render(request, "server.html", {"server_list": server_list})
###################################################
4.定义html模板,templates/server.html    
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>服务器详情</title>
</head>
<body>
<table border="1"><thead><tr><th>服务器名称</th><th>IP</th><th>所有应用</th></tr></thead><tbody>{% for i in server_list %}<tr><td>{{ i.hostname }}</td><td>{{ i.ip }}</td><td>{% for n in i.app.all %}{{ n }}{% endfor %}</td></tr>{% endfor %}</tbody>
</body>
</html>

在这里插入图片描述

2.前端反向查询,查项目数据。

###################################################
1.定义根路由规则,ORM/urls.py
from django.urls import path,include,re_path
urlpatterns = [path('myapp/',include('myapp.urls')),
]
###################################################
2.定义子路由规则,ORM/myapp/urls.py
from django.urls import path
from myapp import views
urlpatterns = [path('app_server', views.app_server),
]
###################################################
3.定义视图,ORM/myapp/views.py
from django.shortcuts import render
from myapp.models import Project,App
def app_server(request):app_server = App.objects.all()return render(request, "app_server.html", {"app_server": app_server})
###################################################
4.定义html模板,templates/app_server.html    
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>应用详情</title>
</head>
<body>
<table border="1"><thead><tr><th>应用名称</th><th>服务器列表</th></tr></thead><tbody>{% for i in app_server %}<tr><td>{{ i.name}}</td><td>{% for n in i.server_set.all %}{{ n }}{% endfor %}</td></tr>{% endfor %}</tbody>
</body>
</html>
###################################################
5.将search应用部署在bigdata-test1服务器中,将该信息填入到数据库。
app = App.objects.get(name="search")
server = Server.objects.get(hostname="bigdata-test1")
server.app.add(app) 

在这里插入图片描述

4.3 案例:部署应用页

1.前端添加新应用,后端数据入库。

###################################################
1.定义根路由规则,ORM/urls.py
from django.urls import path,include,re_path
urlpatterns = [path('myapp/',include('myapp.urls')),
]
###################################################
2.定义子路由规则,ORM/myapp/urls.py
from django.urls import path
from myapp import views
urlpatterns = [path('app_server', views.app_server),
]
###################################################
3.定义视图,ORM/myapp/views.py
from django.shortcuts import render,redirect
from myapp.models import Project,App
def app_add(request):if request.method == "GET":project_list = Project.objects.all()server_list = Server.objects.all()return render(request,'app_add.html', {"project_list": project_list,'server_list':server_list})elif request.method == "POST":app_name = request.POST.get("app-name")app_describe = request.POST.get("app-describe")project_name = request.POST.get("project-name")server_list = request.POST.getlist("server-list")  # 使用getlist获取,用于获取表单多少值if not app_name:msg = "添加字段异常"return render(request, 'app_add.html')try:project_obj = Project.objects.get(name=project_name)app = App.objects.create(name=app_name, describe=app_describe, project=project_obj)# 将服务器(可能多个)关联应用print(server_list)for server in server_list:server = Server.objects.get(hostname=server)server.app.add(app)msg ="添加成功"code = 0except:msg ="添加失败"code = 1return redirect(app_add)
###################################################
4.定义html模板,templates/app_add.html    
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>创建应用</title>
</head>
<body>
<form action="" method="post">应用名称 : <input type="text" name="app-name"><br>应用描述 : <input type="text" name="app-describe"><br>所属项目 :<select name="project-name" id="">{% for i in project_list %}<option value="{{ i.name }}">{{ i.name }}</option>{% endfor %}</select><br>部署服务器 :<select name="server-list" multiple>{% for i in server_list %}<option value="{{ i.hostname }}">{{ i.hostname }}</option>{% endfor %}<br></select><br><button type="submit">创建</button><button type="reset">清空</button>{{ msg }}
</form>
</body>
</html>
###################################################
5.修改templates/app.html模板内容,显示服务器列表信息。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>应用表单</title>
</head>
<body>
<table border="1"><thead><tr><th>应用名称</th><th>应用描述</th><th>所属项目</th><th>服务器列表</th></tr></thead><tbody>{% for i in app %}<tr><td>{{ i.name }}</td><td>{{  i.describe }}</td><td>{{ i.project.name}}</td><td>{% for n in i.server_set.all %}{{ n }}{% endfor %}</td></tr>{% endfor %}</tbody>
</body>
</html>

在这里插入图片描述

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

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

相关文章

vue使用vant中的popup层,在popup层中加搜索功能后,input框获取焦点 ios机型的软键盘不会将popup顶起来的问题

1.使用vant的popup弹出层做了一个piker的选择器,用户需要在此基础上增加筛选功能。也就是输入框 2.可是在ios机型中,input框在获取焦点以后,ios的软键盘弹起会遮盖住我们的popup层,导致体验不是很好 3.在大佬的解答及帮助下,采用窗口滚动的方式解决此方法 <Popupv-model&q…

AxureRP制作静态站点发布互联网,内网穿透实现公网访问

AxureRP制作静态站点发布互联网&#xff0c;内网穿透实现公网访问 文章目录 AxureRP制作静态站点发布互联网&#xff0c;内网穿透实现公网访问前言1.在AxureRP中生成HTML文件2.配置IIS服务3.添加防火墙安全策略4.使用cpolar内网穿透实现公网访问4.1 登录cpolar web ui管理界面4…

Java线程池UncaughtExceptionHandler无效?可能是使用方式不对

背景 在业务处理中&#xff0c;使用了线程池来提交任务执行&#xff0c;但是今天修改了一小段代码&#xff0c;发现任务未正确执行。而且看了相关日志&#xff0c;也并未打印结果。 源码简化版如下&#xff1a; 首先&#xff0c;自定义了一个线程池 public class NamedThrea…

Linux环境下SVN服务器的搭建与公网访问:使用cpolar端口映射的实现方法

文章目录 前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件 3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口 5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6…

vue3:使用:图片生成二维码并复制

实现在 vue3 中根据 url 生成一个二维码码&#xff0c;且可以复制。 注&#xff09;复制功能 navigator.clipboard.write 只能在安全的localhost 这种安全网络下使用。https中需要添加安全证书&#xff0c;且在域名&#xff08;例&#xff1a;https://www.baidu.com&#xff0…

家政服务小程序制作教程:从设计到开发的详细步骤

在当今的数字化时代&#xff0c;小程序已经成为了一种趋势&#xff0c;不仅提供了方便快捷的应用体验&#xff0c;也成为了各种行业进行营销和客户管理的有力工具。特别是对于家政行业&#xff0c;通过小程序的应用&#xff0c;可以更好地进行业务管理&#xff0c;提升服务质量…

k8s的学习篇1

一 k8s的概念 1.1 k8s k8s是一个轻量级的&#xff0c;用于管理容器化应用和服务的平台。通过k8s能够进行应用的自动化部署和扩容缩容。 1.2 k8s核心部分 1.prod: 最小的部署单元&#xff1b;一组容器的集合&#xff1b;共享网络&#xff1b;生命周期是短暂的&#xff1b; …

nginx配置keepalive长连接

nginx之keepalive详解与其配置_keepalive_timeout_恒者走天下的博客-CSDN博客 为什么要有keepalive? 因为每次建立tcp都要建立三次握手&#xff0c;消耗时间较长&#xff0c;所以为了减少tcp建立连接需要的时间&#xff0c;就可以设置keep_alive长连接。 nginx中keep_alive对…

Docker网络-探索容器网络如何相互通信

当今世界&#xff0c;企业热衷于容器化&#xff0c;这需要强大的网络技能来正确配置容器架构&#xff0c;因此引入了 Docker Networking 的概念。Docker 是一种容器化平台&#xff0c;允许您在独立、轻量级的容器中运行应用程序和服务。Docker 提供了一套强大的网络功能&#x…

时序预测 | MATLAB实现基于TSO-XGBoost金枪鱼算法优化XGBoost的时间序列预测(多指标评价)

时序预测 | MATLAB实现基于TSO-XGBoost金枪鱼算法优化XGBoost的时间序列预测(多指标评价) 目录 时序预测 | MATLAB实现基于TSO-XGBoost金枪鱼算法优化XGBoost的时间序列预测(多指标评价)预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab实现基于TSO-XGBoost金枪鱼算…

大数据项目实战(安装Hive)

一&#xff0c;搭建大数据集群环境 1.3 安装Hive 1.3.1 Hive的安装 1.安装MySQL服务 1&#xff09;检查是否安装MySQL&#xff0c;如安装将其卸载。卸载命令 rpm -qa | grep mysql 2&#xff09;搜索MySQL文件夹&#xff0c;如存在则删除 find / -name mysql rm -rf /etc/s…

Ceph入门到精通-如何编译安装Quagga?

Quagga 1. 理论部分 1.1 软件简介 Quagga中文翻译斑驴&#xff0c;是一种先进的路由软件包&#xff0c;提供一套基于TCP/IP的路由协议。 1.2 斑驴的应用场景 – 使得操作系统变成专业的路由 – 使得操作系统具有与传统路由通过路由协议直接对接 1.3 斑驴支持的路由协议 …

2分钟搭建自己的GPT网站

如果觉得官方免费的gpt&#xff08;3.5&#xff09;体验比较差&#xff0c;总是断开&#xff0c;或者不会fanqiang&#xff0c;那你可以自己搭建一个。但前提是你得有gpt apikey。年初注册的还有18美金的额度&#xff0c;4.1号后注册的就没有额度了。不过也可以自己充值。 有了…

五度易链最新“产业大数据服务解决方案”亮相,打造数据引擎,构建智慧产业

快来五度易链官网 点击网址【http://www.wdsk.net/】 看看我们都发布了哪些新功能!!! 自2015年布局产业大数据服务行业以来&#xff0c;“五度易链”作为全国产业大数据服务行业先锋企业&#xff0c;以“让数据引领决策&#xff0c;以智慧驾驭未来”为愿景&#xff0c;肩负“打…

Nginx全局配置

目录 一、修改启动进程数 二、日制分割 三、nginx进程的优先级&#xff08;work进程的优先级&#xff09; 四、http设置 4.1http 协议配置说明 4.2mime 4.3 server块构建虚拟主机 4.4 location 一、修改启动进程数 worker_processes 1; #允许的启动工作进程数数量…

webrtc的Sdp中的Plan-b和UnifiedPlan

在一些类似于视频会议场景下&#xff0c;媒体会话参与者需要接收或者发送多个流&#xff0c;例如一个源端&#xff0c;同时发送多个左右音轨的音频&#xff0c;或者多个摄像头的视频流&#xff1b;在2013年&#xff0c;提出了2个不同的SDP IETF草案Plan B和Unified Plan&#x…

【C++初阶】list的常见使用操作

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…

Jumpserver堡垒机管理(安装和相关操作)-------从小白到大神之路之学习运维第89天

第四阶段 时 间&#xff1a;2023年8月28日 参加人&#xff1a;全班人员 内 容&#xff1a; Jumpserver堡垒机管理 目录 一、堡垒机简介 &#xff08;一&#xff09;运维常见背黑锅场景 &#xff08;二&#xff09;背黑锅的主要原因 &#xff08;三&#xff09;解决背黑…

Unity shader 入门之渲染管线一、总览

如下示意图 应用阶段(ApplicationStage)&#xff1a;准备场景信息&#xff08;视景体&#xff0c;摄像机参数&#xff09;、粗粒度剔除、定义每个模型的渲染命令&#xff08;材质&#xff0c;shader&#xff09;——由开发者定义&#xff0c;不做讨论。几何阶段(GemetryStage)&…

centos服务器系统下安装python3并与自带的python2

centos服务器系统下安装python3并与自带的python2 在centos中&#xff0c;自带有python2&#xff0c;因此需要经常安装python3。但是这里有一个坑&#xff0c;就是centos的yum是用python2写的&#xff0c;如果正常编译安装python3&#xff0c;那么yum就会直接挂了。为了方便以…