Django基础5——ORM中间程序
文章目录
- 一、基本了解
- 二、ORM基本操作
- 2.1 连接数据库
- 2.1.1 使用sqlite数据库
- 2.1.2 使用MySQL数据库
- 2.2 对数据库操作
- 2.2.1 增(前端数据——>数据库)
- 2.2.2 查(数据库——>前端展示)
- 2.2.3 改(修改数据)
- 2.2.3 删(删除数据)
- 三、配置管理后台
- 3.1 登陆后台
- 3.2 创建用户
- 3.3 注册模型
- 3.4 设置语言和时区
- 四、模型类
- 4.1 模型Meta类与方法
- 4.2 常用字段&字段选项
- 4.3 QuerySet序列化
一、基本了解
静态网站&动态网站:
- 静态网站是从本地读取数据,完全由html模板提供的静态数据。
- 动态网站是从数据库读取数据,由动态网页中包含的程序输出结果。
ORM作用:
- 动态网站中的数据是从数据库中返回的,在django就是由ORM中间程序对数据库进行操作,把常规的SQL语句转化成独有的语法,继而拿到数据并返回给浏览器。
ORM概念:
- 对象关系映射(Object Relational Mapping,ORM):是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。简单来说就是在编程语言中实现的一种虚拟对象数据库。我们对虚拟对象数据库进行操作,它会转换成具体的SQL去操作数据库,这样一来我们就不需要学习复杂的SQL语句了。
ORM优势:
- ORM优势就是不必熟悉复杂的SQL语句,容易上手,避免新手写SQL效率问题。
- Django默认创建的数据库表。
表名 | 作用 |
---|---|
auth_user | 用户表 |
auth_user_groups | 用户所属组的表 |
auth_user_user_permissions | 用户权限表 |
auth_group | 用户组表 |
auth_group_permissions | 用户组权限表 |
auth_permission | 存放全部权限的表,其他的表的权限都是从此表中外键连接过去的 |
django_session | 保存HTTP状态 |
django_migrations | 数据库迁移记录 |
二、ORM基本操作
2.1 连接数据库
2.1.1 使用sqlite数据库
- Django默认使用的数据库是sqlite3,一般用于数据测试,生产环境还是建议使用mysql或oracle。
- sqlite数据库是一个文件级别的数据库,所有数据都存放在一个文件中。
1.定义数据库表,在app/models.py文件中定义。
from django.db import models##定义一个模型类,自定义类名称User
class User(models.Model):user = models.CharField(max_length=30) #用户名name = models.CharField(max_length=30) #姓名sex = models.CharField(max_length=10) #性别age = models.IntegerField() #年龄label = models.CharField(max_length=100) #标签
2.在settings.py配置文件中INSTALLED_APPS列表添加APP名称。
##创建一个app,名为myapp
python manage.py startapp myapp
3.将模型类生成具体的数据库表。
##生成迁移文件, 是一个更偏向sql语句的执行文件,文件位置在myapp\migrations\0001_initial.py。
python manage.py makemigrations##执行迁移文件生成表。
python manage.py migrate
4.进入数据库查看表。生成表名的默认格式:应用名_模型类名小写。
2.1.2 使用MySQL数据库
1.使用docker启动一个mysql实例,模拟生产环境中的mysql数据库。
docker run -d \
--name qingjun \
-p 3306:3306 \
-v mysqldata:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7 --character-set-server=utf8
2.使用pip工具安装pymysql模块。
pip install pymysql
3.修改django默认连接数据库。
##修改文件devops/settings.py
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'test','USER': 'root','PASSWORD': '123456','HOST': '192.168.161.132','PORT': '3306',}
}
4.指定数据库驱动。
##操作文件myapp/__init__.py,添加以下内容。
import pymysql
pymysql.install_as_MySQLdb()
5.执行迁移文件生成表。
python manage.py migrate
6.mysql数据库查看表。
2.2 对数据库操作
2.2.1 增(前端数据——>数据库)
1.代码示例。
#######################################################
1、操作文件ORM/urls.py下添加。
from django.contrib import admin
from django.urls import path,include
urlpatterns = [path('admin/', admin.site.urls),path('myapp/',include('myapp.urls'))
]#######################################################
2、操作文件ORM/myapp/urls.py
from django.urls import path,include
from myapp import views
urlpatterns = [path('user_add',views.user_add)
]#######################################################
3、操作文件ORM/myapp/views.py
from django.shortcuts import render,HttpResponse
from myapp.models import User ##导入模型类
def user_add(request):##向数据库插入一条数据。User.objects.create(user='qingjun',name='卿君',sex='男',age='35',label="IT,讲师,热爱健身")return render(request, 'user_add.html')#######################################################
4、操作文件templates/user_add.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>新用户注册</title>
</head>
<body>
<form action="" method="post"><h1>注册用户</h1>用户名 : <input type="text" name="user"><br>姓名 : <input type="text" name="name"><br>性别 : <input type="text" name="sex"><br>年龄 : <input type="text" name="age"><br>标签 : <input type="text" name="label"><br><button type="submit">提交</button>
</form>
</body>
</html>
2.浏览器访问http://127.0.0.1:8000/myapp/user_add,访问一次就执行一遍视图函数,就往数据库写一遍数据。
3.查看数据库表数据。
4.修改视图函数代码,变成在网页表单中填入信息可以提交到数据库。
#######################################################
##操作文件ORM/myapp/views.py
from django.shortcuts import render,HttpResponse
from myapp.models import User ##导入模型类
def user_add(request):if request.method == "GET":return render(request, 'user_add.html')elif request.method == "POST":#获取前端表单提交的数据user = request.POST.get("user")name = request.POST.get("name")sex = request.POST.get("sex")age = request.POST.get("age")label = request.POST.get("label")try:User.objects.create( ##方式一写法。user=user,name=name,sex=sex,age=age,label=label)obj = User( ##方式二写法。user=user,name=name,sex=sex,age=age,label=label)msg = "用户添加成功!!!"code = 0except:msg = "用户添加失败,请检查!"code = 1return render(request, 'user_add.html',{'msg': msg, 'code': code})#######################################################
##操作文件templates/user_add.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>新用户注册</title>
</head>
<body>
<form action="" method="post"><h1>注册用户</h1>用户名 : <input type="text" name="user"><br>姓名 : <input type="text" name="name"><br>性别 : <input type="text" name="sex"><br>年龄 : <input type="text" name="age"><br>标签 : <input type="text" name="label"><br><button type="submit">提交</button>{% if code == 0 %}<p style="color:blue;">{{ msg }}</p>{% elif code == 1 %}<p style="color: red">{{ msg }}</p>{% endif %}
</form>
</body>
</html>
5.前端提交表单数据到数据库。
2.2.2 查(数据库——>前端展示)
1.示例代码。
#######################################################
1、操作文件ORM/urls.py下添加。
from django.contrib import admin
from django.urls import path,include
urlpatterns = [path('admin/', admin.site.urls),path('myapp/',include('myapp.urls'))
]#######################################################
2、操作文件ORM/myapp/urls.py
from django.urls import path,include
from myapp import views
urlpatterns = [path('user_add',views.user_add),path('user_list',views.user_list) ##添加此行。
]#######################################################
3、操作文件ORM/myapp/views.py
from django.shortcuts import render,HttpResponse
from myapp.models import User ##导入模型类
def user_list(request):user_list = User.objects.all()return render(request, "user_list.html", {'user_list': user_list})#######################################################
4、操作文件templates/user_list.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><th>标签</th></tr></thead><tbody>{% for i in user_list %}<tr><td>{{ i.user }}</td><td>{{ i.name }}</td><td>{{ i.sex }}</td><td>{{ i.age }}</td><td>{{ i.label }}</td></tr>{% endfor %}</tbody>
</body>
</html>
2.访问网页,查询数据库数据。
3.其他查询语句。
from myapp.models import UserUser.objects.all() # 获取所有记录
User.objects.filter(user="qingjun") # 加条件获取记录,例如字段是多少
User.objects.filter(age__gt=20) # 加条件获取记录,例如年龄大于多少
User.objects.get(id=2) # 获取单条记录,id是唯一
2.2.3 改(修改数据)
- 修改id=2的数据。
1.修改之前。
2.修改之后。
##方式一。
User.objects.filter(id=2).update(user='baimu',name='柏木',sex='女',label='公关,漂亮,喜欢购物')##方式二。
obj = User.objects.get(id=2)
obj.age = 25
obj.save()
2.2.3 删(删除数据)
1.删除id=3的数据。
##方式一。
User.objects.filter(id=3).delete()##方式二。
obj = User.objects.get(id=2)
obj.delete()
2.查看数据。
三、配置管理后台
- 管理后台:一个网站一般都会开发一个后台系统,为管理员提供一种更简单的数据库操作方式,不然每次修改数据都需要输入代码修改。
3.1 登陆后台
1.访问Django后台管理页面。
from django.contrib import admin # 内建管理后台功能
from django.urls import path
urlpatterns = [path('admin/', admin.site.urls), # 内建管理后台访问地址
]
2.创建管理员账号。
python manage.py createsuperuser
3.登录后台管理系统。
3.2 创建用户
1.创建新用户,并授权登录。
2.新用户登录。
3.3 注册模型
1.注册模型,让数据库的数据显示到后台管理系统中。
##修改文件myapp/admin.py
from django.contrib import admin
from myapp import models
admin.site.register(models.User)
2.可以直接修改数据库数据。
3.4 设置语言和时区
1.修改django配置文件。
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = False
2.查看效果。
四、模型类
4.1 模型Meta类与方法
- Django模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性。
常用属性选项 | 描述 |
---|---|
app_label | 指定APP名称,当模型类不在默认的APP的models.py文件中,这时需要指定模型类是属于哪个APP。 |
db_table | 指定生成的数据库表名称,默认是”应用名_模型名” |
ordering | 对象的默认顺序,值是一个列表或元组。 元素是一个字符串表示字段名,元素前面带减号表示倒序,没有表示升序,问号表示随机排序 例如ordering = [“-sex”] |
verbose_name | 定义一个易读的模型名称,默认会加一个复数s |
verbose_name_plural | 定义一个易读的模型名称,不带复数s |
1.verbose_name用法,优化前端模型名称显示为英文问题。
##myapp/models.py文件添加class User(models.Model):......##添加以下代码。class Meta:app_label = "myapp" ##模型类标签。db_table ="myapp_user" #自定义生成的数据库表名verbose_name="用户表" #前端显示为"用户表"verbose_name_plural="用户表" #优化前端显示问题,去掉复数形式
2.优化用户表名显示成python对象问题。
##myapp/models.py文件添加
class User(models.Model):......class Meta:......##添加以下代码。ordering = ["user"] # 对象的默认顺序,用于获取对象列表时def __str__(self):return self.user # 返回字段值
4.2 常用字段&字段选项
字段类型 | 描述 |
---|---|
AutoField(**options) | ID自动递增,会自动添加到模型中 |
BooleanField(**options) | 布尔值字段(true/false),默认值是None |
CharField(max_length=None[,**options]) | 存储各种长度的字符串 |
EmailField([max_length=254,**options]) | 邮件地址,会检查是否合法 |
FileField([upload_to=None,max_length=100,**options]) | 保存上传文件。upload_to是保存本地的目录路径 |
FloatField([**options]) | 浮点数 |
IntegerField([**options]) | 整数 |
GenericIPAddressField(protocol=’both’, unpack_ipv4=False, **options) | IP地址 |
TextField([**options]) | 大文本字符串 |
URLField([max_length=200,**options]) | 字符串类型的URL |
DateTimeField([auto_now=False,auto_now_add=False,**options]) | 日期和时间 1、auto_now=True时,第二次保存对象时自动设置为当前时间。用于最后一次修改的时间戳,比如更新。 2、auto_now_add=True时,第一次创建时自动设置当前时间。用于创建时间的时间戳,比如新增。 这两个参数互斥,不能写到一个字段里,分开定义字段用。 |
DateField([auto_now=False,auto_now_add=False,**options]) | 日期 |
TimeField([auto_now=False,auto_now_add=False,**options]) | 时间 |
字段选项 | 描述 |
---|---|
null | 如果为True,字段用NULL当做空值,默认False |
blank | 如果为True,允许为空,默认False |
db_index | 如果为True,为此字段建立索引 |
default | 字段的默认值 |
primary_key | 如果为True,设置为主键 |
unique | 如果为True,保持这个字段的值唯一 |
verbose_name | 易读的名称,管理后台会以这个名称显示 |
- 添加时间日期。
1.给数据库表添加时间日志字段。
##myapp/models.py文件添加
class User(models.Model):......create_datetime = models.DateTimeField(auto_now_add=True, blank=True, null=True) ##第一次创建时间update_datetime = models.DateTimeField(auto_now=True, blank=True, null=True) ##更新时间##生成迁移文件,并同步该文件。
python manage.py makemigrations
python manage.py migrate
2.verbose_name用法,优化显示前端用户名称。
4.3 QuerySet序列化
序列化:将Python对象转为传输的数据格式.
反序列化:将传输的数据格式转为Python对象
ORM查询返回的是QuerySet对象,有两种方法可以转为JSON字符串:
- 使用内建函数 serializers
- 遍历QuerySet对象将字段拼接成字典,再通过json库编码
1.使用函数serializers转换为JSON格式。
#######################################################
1、操作文件ORM/urls.py下添加。
from django.contrib import admin
from django.urls import path,include
urlpatterns = [path('admin/', admin.site.urls),path('myapp/',include('myapp.urls'))
]#######################################################
2、操作文件ORM/myapp/urls.py
from django.urls import path,include
from myapp import views
urlpatterns = [path('api',views.api)
]#######################################################
3、操作文件ORM/myapp/views.py
from django.shortcuts import render,HttpResponse
from myapp.models import User ##导入模型类
def api(request):from django.core import serializersobj = User.objects.all()data = serializers.serialize('json', obj)return HttpResponse(data)
2.配合json库遍历查询,优势是可以自定义返回内容。
#######################################################
1、操作文件ORM/urls.py下添加。
from django.contrib import admin
from django.urls import path,include
urlpatterns = [path('admin/', admin.site.urls),path('myapp/',include('myapp.urls'))
]#######################################################
2、操作文件ORM/myapp/urls.py
from django.urls import path,include
from myapp import views
urlpatterns = [path('api',views.api)
]#######################################################
3、操作文件ORM/myapp/views.py
from django.shortcuts import render,HttpResponse
from myapp.models import User ##导入模型类
def api(request):import jsonobj = User.objects.all() ##返回的是pathon的QuerySet对象。l = [] ##[{},{}] ##是一个列表,里面包含多个字典。for i in obj:d = {}d['name'] = i.named['user'] = i.userd['label'] = i.labell.append(d)json_data = json.dumps(l)return HttpResponse(json_data)
相关文章:
Django基础5——ORM中间程序
文章目录 一、基本了解二、ORM基本操作2.1 连接数据库2.1.1 使用sqlite数据库2.1.2 使用MySQL数据库 2.2 对数据库操作2.2.1 增(前端数据——>数据库)2.2.2 查(数据库——>前端展示)2.2.3 改(修改数据࿰…...
SpringAOP详解(上)
当需要在方法前后做一些操作就需要借助动态代理来实现 一、动态代理实现方法 1、jdk自带实现方式 jdk实现代理是被代理类实现接口的方式 public interface UserInterface {void test(); }public class UserService implements UserInterface {public void test() {System.o…...
C++ 存储类
存储类定义 C 程序中变量/函数的范围(可见性)和生命周期。这些说明符放置在它们所修饰的类型之前。下面列出 C 程序中可用的存储类: autoregisterstaticexternmutablethread_local (C11) 从 C 17 开始,auto 关键字不再是 C 存储…...
【教程分享】Docker搭建Zipkin,实现数据持久化到MySQL、ES
1 拉取镜像 指定版本,在git查看相应版本,参考: https://github.com/openzipkin/zipkin 如2.21.7 docker pull openzipkin/zipkin:2.21.7 2 启动 Zipkin默认端口为9411。启动时通过-e server.portxxxx设置指定端口 docker run --name zi…...
数据库——MySQL高性能优化规范
文章目录 数据库命令规范数据库基本设计规范1. 所有表必须使用 Innodb 存储引擎2. 数据库和表的字符集统一使用 UTF83. 所有表和字段都需要添加注释4. 尽量控制单表数据量的大小,建议控制在 500 万以内。5. 谨慎使用 MySQL 分区表6.尽量做到冷热数据分离,减小表的宽度7. 禁止在…...
openapi中job提交
openapi中job提交 简介创建job查看job查看job 的描述查看job 的日志 镜像地址: https://www.jianshu.com/p/fcb3094f8c48?v1693020692471 简介 这里使用微软OpenPAI, 在nvidia的GPU设备上进行job测试。 创建job protocolVersion: 2 name: lenet_gpu_pytorch112_…...
Spring Boot 整合 分布式搜索引擎 Elastic Search 实现 数据聚合
文章目录 ⛄引言一、数据聚合⛅简介⚡聚合的分类 二、DSL实现数据聚合⏰Bucket聚合⚡Metric聚合 三、RestAPI实现数据聚合⌚业务需求⏰业务代码实现 ✅效果图⛵小结 ⛄引言 本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎,具备非常…...
深入探讨代理技术:保障网络安全与爬虫效率
在当今数字化时代,代理技术在网络安全与爬虫领域扮演着重要角色。从Socks5代理、IP代理,到网络安全和爬虫应用,本文将深入探讨这些关键概念,揭示它们如何相互关联以提高网络安全性和爬虫效率。 1. 代理技术简介 代理技术是一种允…...
【云原生】Docker私有仓库 RegistryHabor
目录 1.Docker私有仓库(Registry) 1.1 Registry的介绍 1.2 Registry的部署 步骤一:拉取相关的镜像 步骤二:进行 Registry的相关yml文件配置(docker-compose) 步骤三:镜像的推送 2. Regist…...
二叉树先序遍历的两种思路
二叉树先序遍历的两种思路 遍历思路 遍历二叉树首先判断一个节点应该做什么然后遍历左子树 遍历右子树 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int …...
小研究 - JVM 逃逸技术与 JRE 漏洞挖掘研究(一)
Java语言是最为流行的面向对象编程语言之一, Java运行时环境(JRE)拥有着非常大的用户群,其安全问题十分重要。近年来,由JRE漏洞引发的JVM逃逸攻击事件不断增多,对个人计算机安全造成了极大的威胁。研究JRE安…...
好用的可视化大屏适配方案
1、scale方案 优点:使用scale适配是最快且有效的(等比缩放) 缺点: 等比缩放时,项目的上下或者左右是肯定会有留白的 实现步骤 <div className"screen-wrapper"><div className"screen"…...
言有三新书出版,《深度学习之图像识别(全彩版)》上市发行,配套超详细的原理讲解与丰富的实战案例!...
各位同学,今天有三来发布新书了,名为《深度学习之图像识别:核心算法与实战案例(全彩版)》,本次书籍为我写作并出版的第6本书籍。 前言 2019年5月份我写作了《深度学习之图像识别:核心技术与案例…...
英特尔开始加码封装领域 | 百能云芯
在积极推进先进制程研发的同时,英特尔正在加大先进封装领域的投入。在这个背景下,该公司正在马来西亚槟城兴建一座全新的封装厂,以加强其在2.5D/3D封装布局领域的实力。据了解,英特尔计划到2025年前,将其最先进的3D Fo…...
基于大数据+django+mysql的学习资源推送系统的设计与实现(含报告+源码+指导)
本系统为了数据库结构的灵活性所以打算采用MySQL来设计数据库,而Python技术, B/S架构则保证了较高的平台适应性。文中主要是讲解了该系统的开发环境、要实现的基本功能和开发步骤,并主要讲述了系统设计方案的关键点、设计思想。 由于篇幅限制…...
CCF HPC China2023 | 盛大开幕,邀您关注澎峰科技
2023年8月24日,以“算力互联智领未来”为主题的第十九届全国高性能计算学术年会(CCF HPC China 2023)在青岛红岛国际会议展览中心拉开帷幕。特邀嘉宾涵盖行业大咖,主持阵容同样是“重量级”——来自国家并行计算机工程技术研究中心…...
【git进阶使用】 告别只会git clone 学会版本控制 ignore筛选 merge冲突等进阶操作
git使用大全 基本介绍git 快速上手一 环境安装(默认已安装)二 远程仓库克隆到本地1 进入rep文件夹目录2 复制远程仓库地址3 git clone克隆仓库内容到本地4 修改后版本控制4.1 修改文件4.2 git status查看版本库文件状态4.3 git add将文件加入版本库暂存区…...
【【萌新的STM32学习-16中断的基本介绍1】】
萌新的STM32学习-16中断的基本介绍1 中断 什么是中断 中断是打断CPU执行正常的程序,转而处理紧急程序,然后返回原暂停的程序继续执行,就叫中断 中断的作用 实时控制 : 就像对温度进行控制 故障控制 : 第一时间对突发情…...
ctfshow-红包题第二弹
0x00 前言 CTF 加解密合集CTF Web合集 0x01 题目 0x02 Write Up 同样,先看一下有没有注释的内容,可以看到有一个cmd的入参 执行之后可以看到文件代码,可以看到也是eval,但是中间对大部分的字符串都进行了过滤,留下了…...
C# winform中无标题栏窗口如何实现鼠标拖动?
文章目录 在C#中,可以通过重写窗体的鼠标事件来实现无标题栏窗体的拖动。 具体步骤如下: 禁用窗体的默认标题栏:在窗体属性中设置FormBorderStyle为None。 重写鼠标事件:在窗体类中重写MouseDown、MouseMove和MouseUp事件。 定义变量存储鼠标点击时的坐标。 在MouseDown事…...
【操作系统】各平台定时器粒度
文章目录 WindowsLinux Windows 在 Windows 操作系统中,定时器的精度取决于系统时钟的精度。通常情况下,Windows 系统时钟的精度为 15.6 毫秒(即每秒钟约 64 次时钟中断),因此定时器的最小精度也是 15.6 毫秒。但是&a…...
抽象又有点垃圾的JavaScript
常数的排序 let x 10;let y 20;let z;if (x < y) {z x;x y;y z;}console.log(x, y);//x 20 ,y 10 通过一个媒介来继承x的初始值,然后将y的值赋值给x,再把媒介z的值赋值给y,达到排序 一个可重复使用的排序程序 第一种 function s…...
【Spring Boot】使用Spring Boot进行transformer的部署与开发
Transformer是一个用于数据转换和处理的平台,使用Spring Boot可以方便地进行Transformer的部署与开发。 以下是使用Spring Boot进行Transformer部署与开发的步骤: 创建Spring Boot项目 可以使用Spring Initializr创建一个简单的Spring Boot项目。在创…...
Qt应用开发(基础篇)——富文本浏览器 QTextBrowser
一、前言 QTextBrowser类继承于QTextEdit,是一个具有超文本导航的富文本浏览器。 框架类 QFramehttps://blog.csdn.net/u014491932/article/details/132188655 滚屏区域基类 QAbstractScrollAreahttps://blog.csdn.net/u014491932/article/details/132245486 文…...
JDBC:更新数据库
JDBC:更新数据库 更新记录删除记录 为了更新数据库,您需要使用语句。但是,您不是调用executeQuery()方法,而是调用executeUpdate()方法。 可以对数据库执行两种类型的更新: 更新记录值删除记录 executeUpdate()方…...
如何自定义iview树形下拉内的内容
1.使用render函数给第一层父级定义 2. 使用树形结构中的render函数来定义子组件 renderContent(h, {root, node, data}) {return data.children.length0? h(span, {style: {display: inline-block,width: 400px,lineHeight: 32px}}, [h(span, [h(Icon, {type: ios-paper-outli…...
技术的巅峰演进:深入解析算力网络的多层次技术设计
在数字化时代的浪潮中,网络技术正以前所未有的速度演进,而算力网络作为其中的一颗明星,以其多层次的技术设计引领着未来的网络构架。本文将带您深入探索算力网络独特的技术之旅,从底层协议到分布式控制,为您呈现这一创…...
图像特征描述和人脸识别
CV_tutorial2 特征检测使用HOG实现行人检测Harris角点检测关键特征检测SIFT纹理特征 LBP算法 模板匹配人脸识别 特征检测 使用HOG实现行人检测 HOG方向梯度直方图 实现过程: 灰度化(为了去掉颜色、光照对形状的影响);采用Gamma校正法对输…...
浅谈Lua协程和函数的尾调用
前言 虽然不经常用到协程,但是也不能谈虎色变。同时,在有些场景,协程会起到一种不可比拟的作用。所以,了解它,对于一些功能,也会有独特的思路和想法。 协程 概念 关于进程和线程的概念就不多说。 那么…...
【VS Code插件开发】状态栏(五)
🐱 个人主页:不叫猫先生,公众号:前端舵手 🙋♂️ 作者简介:前端领域优质作者、阿里云专家博主,共同学习共同进步,一起加油呀! 📢 资料领取:前端…...
郑州建站费用/关键词搜索引擎又称为
在qt官网中推荐使用qxt解析csv文件 qxt在linux下并不支持qt5,主要原因是qt5使用了一些渲染和处理,这些都将qxt的原生性降低了。qxt的一部分仍然可以被复用,但目前并无复用的案例。 Excel解析,在windows下,qt提供了qta…...
wordpress git升级/网站推广的途径和方法
如果您只想使用CSS3,甚至不需要使用任何jQuery / Javascript。只需在您的CSS中执行此操作:.confirm_selection {-webkit-transition: text-shadow 0.2s linear;-moz-transition: text-shadow 0.2s linear;-ms-transition: text-shadow 0.2s linear;-o-tr…...
网站建设的常见问题/谷歌推广费用
Nginx是什么? 开源且高性能、可靠的HTTP中间件、代理服务。 类似于nginx的? HTTPD-apache基金会、IIS-微软、GWS-Google 为什么使用nginx? IO多路复用epoll 轻量级(功能模块少、代码模块化) CPU亲和:…...
岳阳政府网站建设公司/外贸推广平台哪家好
这里需要升级docker版本,因为centos7 yum源默认自带的docker版本无法使用compose,详情见: http://nanguawu.me/container/5013.html容器部署目录结构:[rootvm2 web_django]# tree -L 2.├── db│ ├── auto.cnf│ ├── ca-key.pem│ ├── ca.pem…...
wordpress 缩略图地址/seo排名点击器原理
作者: 中国科学院大气物理研究所 律成林 ————————————————2023年1月26日追加内容———————————————— 使用m_vec时的注意事项: 在使用m_vec函数时,输入数据要用双精度数组(double)。如果是单精度数组(sing…...
临沂网站推广goldball/河源市企业网站seo价格
对于一些数据我们需要进行加密,下面介绍加密的一种方法 前端vue对密码进行加密 import CryptoJS from crypto-js// 默认的 KEY 与 iv 如果没有给 const KEY CryptoJS.enc.Utf8.parse("1234567890123456"); const IV CryptoJS.enc.Utf8.parse(1234567890…...