当前位置: 首页 > news >正文

web应用开发说明文档

工程目录结构

FACTORY--bin                    #网络流可执行程序 参考后文1.1部分文字说明webrtc-streamer--deployment             #部署相关的配置--mysql              #参考1.3 mysql数据库详细说明--conf           #存放mysql的配置文件--data           #存放pem加密数据,参考后文1.2部分文字说明--nginx              #参考1.5 nginx的详细说明xxx.conf         #正向代理 反向代理 负载均衡 配置文件--factory                #django 基本框架内容,参考1.9asgi.py              #异步(基于 async/await)celery.py            #分布式框架 参考后文1.7flask.conf.py         #flask 配置文件,参考1.8gunicorn.docker.conf.py  #docker 中使用gunicorn部署django应用的配置文件 gunicorn.conf.py         #使用gunicorn部署django应用的配置文件 settings.py          #django项目常用的配置urls.py              #视图函数 Viw 映射到urlswsgi.py              #同步(单线程/多线程/多进程)--hardwarefire.pytem.py--log                    #存放日志--manage                 #管理模块--migrations         #数据库迁移模型  回滚 更新数据库内容  和github 版本管理机制类似#migrations目录中的内容 由python脚本生成。参考1.13详细说明admin.py             #管理 登录界面alisms.py            #阿里云短信服务apps.py              #网页中视图模块broadcast.py         #web应用 广播消息cal_distance.py      #计算人员距离handle_attendance.py #处理事件handle_warnings.py   #处理告警merge_data.py        #合并数据models.py            #数据库字段模型paginations.py       #分页机制rtspyield.py         #产生rtsp 网络流serializers.py       #序列化数据库字段signals.py           #信号storevideo.py        #保存视频task.py              #任务test.py              #测试urls.py              #urls与视图View映射utils.py             #工具views.py             #视图Viewweb_socket.py        #web 应用web_socket2.py--media                  #多媒体文件存放 图像 视频 等--static                 #前端开发使用的静态文件 html文件 图片 css 样式 js脚本等.参考1.10,1.11,1.12--ui                     #用户界面docker-compose.yaml      #使用 Docker Compose 管理多容器应用的核心步骤Dockerfile                #Dockerfile 是一个文本文件,用于定义如何构建 Docker 镜像。它包含一系列指令,告诉 Docker 如何逐步组装镜像(包括基础环境、代码、依赖、配置等)。镜像是容器运行的模板,而容器是镜像的实例化表现gunicorn.conf            #gunicorn 启动django项目的配置文件manage.py                #django项目中的脚本process.pyrequirements.txt        #项目需要的python依赖包,参考1.14详细说明sources.list            #镜像源start copy.shstart_docker.sh         #开启dockerstart.sh                #整个项目的启动入口

1.1 WebRTC Streamer 是一个基于 WebRTC 技术的轻量级流媒体服务器,用于将各种视频源(如摄像头、RTSP流、屏幕捕获等)通过 WebRTC 协议传输到网页浏览器。

1.2  “ pem”是一种常见的加密文件格式,全称是 Privacy Enhanced Mail(隐私增强邮件),但实际上它早已不限于邮件加密用途,而成为存储和传输加密数据的标准格式之一。

1.3 mysql 数据库

        数据库包括 关系型数据库,非关系型数据库(redis为例),文档型数据库(mongoDB为例)。mysql 是一种关系型数据库,结构化查询语言。

        如何清除ubuntu 旧版本mysql

sudo apt purge mysql-*
sudo apt autoremove
sudo apt autoclean
sudo rm -rf /etc/mysql /var/lib/mysql /var/log/mysql /var/run/mysqld
sudo rm -rf /etc/apparmor.d/abstractions/mysql /etc/apparmor.d/cache/usr.sbin.mysqld
sudo deluser mysql 2>/dev/null
sudo delgroup mysql 2>/dev/null
sudo rm /etc/apt/sources.list.d/mysql*

        如何安装mysql 数据库

#mysql数据库的默认端口是3306
#注意 同一台主机可以安装多个版本的数据库 也可以同时启用多个版本的数据库
sudo apt install mysql-server

        数据库的启动,停止和关闭

启用
sudo systemctl start mysql
停止
sudo systemctl stop mysql
关闭
sudo systemctl disable mysql

有时,当启动数据库时会失败,可能原因:清理旧版本数据库不干净。

登录数据库有两种方式:

带密码登录
mysql -uroot -p 
密码是: root_admin_pwd
不需要密码登录方式
sudo mysql -u root

如何更改密码:

mysqladmin -uroot -p’旧密码’password ‘新密码’

如何退出mysql 命令行:

exit;
quit;
\q 直接退出
注意:如果使用ctrl+z强制退出时,下一次启动mysql 时会出现问题

一台主机如何启动多个版本的数据库?

一台主机可以安装和启动多个版本,端口号不一样即可
mysql -u root -p 123 -h localhost -p 3306  // mysql 8.0
mysql -u root -p 123 -h localhost -p 13306  // mysql 5.7

以下是使用数据库的常用语法,基本上包含四种:数据库定义语言DDL, DML数据库操作语言,DQL数据库查询语言,DCL数据库控制语言。

使用mysql 数据库有三种方式:纯命令行手敲; GUI 可视化管理工具navicat等;python/java等编程语言操控数据库,以orm为例。orm为对象关系映射模型。首先介绍命令行常用语法。

命令行方式,数据库语句以";"结束
show databases;          显示数据库
create database mydata;   创建数据库 
drop database mydata;     删除数据库 
use mydata;               使用数据库时  
show tables;              查看数据表 

mysql 配置文件如何编写

[client]
# 客户端配置
[mysqld]
# 服务器配置
[mysqld_safe]
# 安全相关配置
[mysql]
# mysql命令行工具配置
[mysqldump]
# 备份工具配置

1.4 非关系型数据库 redis

redis是一种基于key-value 的 高性能消息中间件;它是一种nosql(not only sql) 类型的数据库,专门为了解决高性能问题。适用于高并发,海量数据处理的场景。支持数据持久化功能,可以将结果保存到硬盘中。补充:上文介绍的mongoDB是一种文档式数据库,还有一种图关系型数据库,用于好友推荐,地图等。

redis也可以作为消息队列中间件使用。在分布式系统框架中,以celery 为例,包含生产者(多线程任务,定时任务),消费者模型;介于生产者和消费者之间的部分,则可以定义为消息队列中间件,用于存储不同的任务。任务执行的结果也可以保存在后端数据库中,比如redis。

因为访问常规mysql数据库有大量的IO操作,如何缓解CPU压力以及IO压力。这时候需要高性能Nosql数据库,即redis。数据直接放在内存中,减少了IO操作,读写效率更高。

nosql类型的数据库,除了redis以外,还包括memcache, mongodb等。memcache只支持单一的数据类型,redis支持多元数据类型,比如string, set, 有序集合zset, hash, list等。memcache不支持数据持久化。

redis 官网链接

https://redis.io/

 本篇介绍redis6的特性与语法

如何安装redis
官网下载tar.gz文件,确保linux系统中安装了gcc编译器,pip install gcc
然后使用make,make install 源码编译redis 也有客户端和服务端,server 和cli
redis-server可以前台启动,也可以后台启动
redis-server  前台启动
redis-cli 通过客户端连接redis
redis-server后台启动 需要更改配置文件
sudo gedit redis.conf 
将配置文件中的daemonize no改为yes
后台启动的命令为 redis-server   redis.conf
然后使用redis-cli 即可以连接redisredis 默认端口为 6379
redis-cli shutdown 关闭redis
或者找到进程号 然后杀掉进程 killmemcache机制: 多线程+锁    vs  redis机制:单线程 多路IO复用keys *           查看当前库中有哪些key
set k1 lucy      设置k1-lucy
get k1           取值
type key         查看key的类型
exists k1        查找是否有k1
del key          直接删除
unlink key       删除,后台删除
expire key       设置过期时间
ttl key          查看还有多少时间过期
select           切换数据库,默认有16个。索引从0开始
dbsize           查看有多少key
flushdb           清空当前数据库
flushall          清空全部库解决功能性问题 扩展问题 性能问题 redis解决性能问题
五大数据类型 字符串 集合 哈希表 list zset有序集合字符串string介绍,最大长度不能超过512M
set key value         设置key  value 键值对,数据类型可以为string
append  key value     在key后面追加value
strlen  key           得到key的长度
setnx key value       key不存在时 ,才能设置
incr key              加1
decr key              减1
incrby key value      加value
decrby key value      减value
原子操作  不会被线程调度机制打断的操作
mset                  同时设置多个key value 对
mget key1 key2
getrange key start end  获取key中从开始到结束的字符,相当于substr操作
setrange key index value 设置新值list操作:
lpush  rpush          从左边插入 右边插入
lpop   rpop           从左边删除 右边删除
rpoplpush             右边取出值 插入左边
lindex                获取指定下标的元素
lrem                  从左边删除n个值
lsetset集合操作 自动去重
sadd k1 v1            添加
smember k1            取值
srandmember           随机取出n个值
sismember             集合中有没有这个元素
scard                 元素个数
spop                  随机吐出一个值
sinter                取得交集
sunion                并集
sdiff                  差集
smove k1 k2 value     将value从一个集合中移动到另外一个集合中哈希操作 hash
hset key:keys  field value   设置       
hget                        取值
hmset                       多元素设置
hmget                       多元素取值
hexists                     是否存在key
hkeys 
hvals有序集合zset 没有重复元素
zadd                       添加元素
zcount key min max         min-max 之间的元素个数
zrank                      返回排名
zrange key start  end      返回min-max 之间的元素
zrangebysocres             从小到大排序
zrevrangebysocres          从大到小排序
zincreby
zrem                       删除指定值redis 配置文件 redis.conf中的内容
bind 127.0.0.1       绑定主机的ip,localhost  加注释的话,其他的主机也可以访问
protected-mode  yes  开启保护模式
tcp-backlog 511      tcp三次握手的总值
timeout 0            开启redis如果不使用,超时机制
daemonize yes        守护进程 后台启动
pidfile               进程号写入文件中
inlcude              包含其他的配置文件
network              网络部分
tcp-keepalive        检测心跳redis 的发布与订阅 客户端可以订阅频道 和ros有点像
SUBSCRIBE topic
publish topicredis6中新数据类型
bitmaps
setbit key index value     设置
getbit key index           取值
bitcount                   二进制表示中1的个数
bitop                      与或非hyperloglog统计页面的访问量 去重 基数统计 
pfcount 统计基数的数量,基数 不含重复元素
pfmerge 合并geospatial  地理信息 经纬度
geoadd  x y city      添加城市经纬度
geopos city           返回经纬度
geodist               两个位置的距离jedis 操作redis6: java 操作redis 客户端工具事务与锁操作
事务的主要操作是 串联多个任务 防止插队
multi 开启任务 组队阶段
exec 执行阶段
discard 放弃组队
组队的时候,有任务失败 则组队失败事务冲突
悲观锁 
每次操作上锁 一个一个操作 效率低
乐观锁 抢票
版本号操作 watch  key 监视锁
秒杀系统 10个商品 1000个人参与持久化操作
rdb redis database 
rdb:在指定的时间间隔内,将内存中的数据集快照写入磁盘
rdb先开一个子进程 fork ,然后生成临时的文件tmp.rdb, 最后tmp覆盖dump.rdb
save 900 1  900秒内有1个发生变化 则持久化AOF	append of file
只写不读,AOF默认不开启
如果adb和aof同时开启,则redis 以aof 为主主从复制
读写分离 提高效率
主服务器写 从服务器读
一主一从  一主多从
容灾的快速恢复如果不使用slaveof,则所有的机器都是主服务器。设置从服务器,则必须使用slaveof 
slaveof 主机的ip
一主两仆 当从机关掉再开启时,默认为主服务器,从新使用slaveof设置从服务器。从机的数据从新复制当主机挂掉再开启时,还是主服务器;
薪火相传 机器比较多时 小组长模式
反客为主 主机挂掉 从机上位
哨兵模式: 反客为主的自动版  需要配置sentinel.conf 集群
redis 容量不够时,如何进行扩容?
并发写操作时 如何分摊?
主机代理 无中心化 互相联通  6台服务器(3对 一主一从)缓存穿透  解决方案 :空值缓存 白名单 布隆过滤器
缓存击穿  数据库访问压力瞬间变大   但是redis正常解决方案:预先设置热门数据 实时调整 使用锁 
缓存雪崩  构建多级缓存架构  nginx   redis缓存 ehcache
分布式锁  一把锁对其他机器也生效  使用setnx设置锁  del 删除锁

1.5 nginx 说明

作用:正向代理,反向代理,负载均衡,动静分离。支持5万个并发连接请求。

正向代理:代理客户端;

反向代理:代理服务器端;

负载均衡:轮询,加权轮询;IP hash 打到固定的服务器上;retry

动静分离:动态资源和静态资源分别放到不同的服务器上。

目前nginx 主流的四个版本:
nginx;nginx plus;  openresty; tengine

安装方法
sudo apt update
sudo apt install nginx
sudo systemctl start nginx
sudo systemctl enable nginx 设置开机自启动
sudo systemctl status nginx 检查nginx 是否在运行
查看nginx位置
whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx /usr/share/man/man8/nginx.8.gz
如何开启或者停止nginx 服务
cd /usr/sbin/
sudo ./nginx -s stop  停止服务
sudo ./nginx -s quit  安全退出
此时,打开浏览器 127.0.0.1,看不到nginx欢迎界面
sudo ./nginx  开启服务
sudo ./nginx -s quit 当用户正在下载文件时,等待用户下载完再停机
sudo ./nginx -s reload 更改完配置文件时,立即生效。不需要重启nginx
nginx.conf 常用配置参数介绍,最小配置文件events {worker_connections 4096;#最大连接数# multi_accept on;
}http配置upstream 负载均衡的配置server {listen 8001;server_name 127.0.0.1;# gzip configgzip on;#启用 Gzip 压缩功能gzip_min_length 1k;#设置触发压缩的最小文件大小gzip_comp_level 9;#控制 Gzip 压缩强度 的配置指令,它定义了压缩级别,取值范围为 1 到 9。级别越高,压缩率越大(文件体积越小),但 CPU 消耗也越高gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;gzip_vary on;#用于控制是否在 HTTP 响应头中添加 Vary: Accept-Encoding 字段。这个字段对浏览器缓存行为和 CDN 缓存策略非常重要gzip_disable "MSIE [1-6]\.";#用于指定哪些用户代理(浏览器)不应该接收 Gzip 压缩的内容。client_max_body_size 200M;#对 Internet Explorer 6 及以下版本禁用 Gzip 压缩,因为这些旧版 IE 浏览器对 Gzip 的支持有问题。root /usr/share/nginx/html/ui/frontend/dist;index index.html;# try_files $uri $uri/index.html /index.html;try_files $uri $uri/ /index.html?s=$uri&$args;location /local-admin/ {alias /usr/share/nginx/html/ui/backend/dist/;index index.html;try_files $uri $uri/ /local-admin/index.html?s=$uri&$args;}location /api {proxy_pass http://web:8000;proxy_set_header   X-Forwarded-Proto $scheme;proxy_set_header   X-Real-IP         $remote_addr;}}配置文件里可以设置多个server,1个server就是一个主机,如果开启多个 server,端口号不能相同
配置文件中的其他参数详解
nginx 启动之后会开启多个进程。主进程为master, 子进程为worker。work_process 为工作进程个数。
include 导入其他的配置文件
mime.type 传输内容的类别,图片,文本,视频,flash等
sendfile on  数据零拷贝 减少一次数据复制过程vhost 虚拟主机
Nginx 虚拟主机(Server Block)可以让你在一台服务器上托管多个网站
http://www.baidu.com/xxxx
整个http是url,xxxx后面的是uri
参数location{}里面的内容就是xxxx的地址
ubuntu 如何配置虚拟主机
打开: etc/hosts 
添加以下内容:
127.0.0.1   example.com  www.example.com也可以在nginx中配置虚拟主机
如何配置本机的域名解析本机的域名解析 外网访问不到;如果需要外网访问到,需要购买域名
本机的域名解析 需要在hosts文件中更改配置。
公网域名配置需要登录阿里云购买域名

1.6 docker

可以实现快速构建,分享,运行应用的程序。

docker主机:安装了docker环境的机器。

docker daemon: docker 后台进程。

docker cli: 客户端

docker : 应用市场

docker ce: 引擎

如何安装docker
卸载旧版本(如果有)
sudo apt-get remove docker docker-engine docker.io containerd runc更新软件包索引并安装依赖
sudo apt-get update
sudo apt-get install \ca-certificates \curl \gnupg \lsb-release添加 Docker 官方 GPG 密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg设置 Docker 仓库
echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null安装 Docker Engine
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin验证安装
sudo docker run hello-world将当前用户加入 docker 组,避免每次使用 sudo
sudo usermod -aG docker $USER
newgrp docker  # 刷新组权限(或重新登录)设置 Docker 开机自启
sudo systemctl enable dockerdocker pull  redis 下载redis
docker run redis   运行程序docker build xxx 构建应用
docker push xxx  推送到应用市场启用docker 
sudo systemctl start docker# 设置开机自启
sudo systemctl enable docker
# 检查运行状态
sudo systemctl status dockerdocker search 搜索镜像# 卸载 Docker
sudo apt purge docker-ce docker-ce-cli containerd.io# 清理残留
sudo rm -rf /var/lib/docker
sudo rm -rf /etc/docker# 重新安装
sudo apt install docker-ce docker-ce-cli containerd.io-p 88:80 端口映射
80为容器的端口号,88为外部主机的端口如何修改doxker 镜像源
sudo gedit /etc/docker/daemon.json添加或者修改以下内容 {"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","https://hub-mirror.c.163.com","https://mirror.baidubce.com"]
}dcoker images  查看当前镜像
下载制定版本的镜像:
docker pull nginx:latestdocker rmi  删除镜像
docker rm -f删除容器 -f 强制删除docker run -d –-name my_nginx nginx
-d 后台启动
-p 88:80  端口映射  外部访问容器内端口如何修改nginx 欢迎页面  docker exec
docker exec -it my_nginx /bin/bash
-it 为交互模式
使用echo 修改html文件内容提交
docker  commit
docker  commit -m “xxxx”  my_nginx
保存
docker save
docker save -o my_nginx.tar my_nginx
加载
docker load
docker load -i  my_nginx.tar如何分享docker login
docker tag  改名字
docker push目录挂载 -v 命令
-v applocation /usr/share/nginx/html
容器挂了之后,文件夹里的内容还在docker 网络机制可以轻松构建集群
docker container inspect
可以查看 虚拟容器的ip 地址。
不同容器之间可以通信,数据传输由于ip地址经常变动,为了稳定访问,用域名的方式。
docker  network 自定义网络docker  network create myworkdocker 批量执行应用
docker compose  yaml文件配置

1.7 分布式框架celery

完成异步任务调度,延迟任务,定时任务等。每分钟可以处理百万级的任务。

celery可以看做生产者,消费者模型。producer 异步任务 发送短信,视频转码等 耗时任务。

beat 为定时任务。

如何安装celery
pip install celery如何在python程序中使用from .celery import app
@app.task
def func()xxxxbroker指定消息队列中间件,消息队列有rabbitmq ,还可以使用redis 或者 kafka
broker=“redis://127.0.0.1:port”
backen=“redis://127.0.0.1:port”
worker 执行
backen存储  执行完的结果存储在backen里
有时候redis 既可以当做消息队列中间件,还可以用作存储后端运行的结果。如何启动celery 任务
pip install eventlet
celery -A celery_task worker -l info -P eventlet

1.8 flask web 开发框架

web开发框架中最常用的两种,一个是flask,另外一个是django。

下面介绍web开发中的一些常识:

http 协议默认是80端口;https 协议默认是443端口

URL: 统一资源定位符,uniform resurce locator。

flask 目录结构static    存放静态文件
templates 存放jinjia2模板
app.py 入口程序  
debug=True 代码更改时,ctrl+s 保存后,网页端可以快速自动更新修改host=0.0.0.0  
让局域网内别的用户可以访问自己的主机上的flask项目
--host=0.0.0.0
如何修改端口号
--port=8000如何定义带有参数的url
blog/<para>如何使用request,可以当做全局参数
@app.route('/blog/list')
def blog_list():page=request.args.get("page",default=1,type=int)return f"你获取的是第{page}页的内容"查询时,
http://127.0.0.1:5000/blog/list?page=2如果需要丰富网页的内容,不仅仅是纯文本。需要使用html ,css ,js,以及图像 更专业的模块flask 依赖jinja2
如何渲染动态网页内容flask 如何操作数据库,需要安装pymysql 
pip install pymysql 
pip install flask-sqlarchemy
pip install flask-migrateorm 对象关系映射模型,可以用pyhton 编程的方式操作 关系型数据库。django也是如此。

1.9 django web开发框架

如何安装django
pip install django如何使用命令行创建django项目
django-admin startproject demo
运行主程
python manage runserver
浏览器中输入  127.0.0.1:8000 可以看到欢迎界面如何创建app
python manage.py startapp booksetting 文件中开启 debug=true
代码中更改,自动更新到网页url 两种传参方式
查询字符串path 中携带参数
第一种
def index2(request):id=request.GET.get('id')return HttpResponse(f"you are search: {id}")第二种
def index3(request,id):return HttpResponse(f"you are search: {id}")urlpatterns = [path('admin/', admin.site.urls),path('book', views.index2),path('book/<int:id>', views.index3),
]path 函数,<>变量类型
<int:>
slug “-”或者“_”
path 类型,可以包含/url取名字 
url 反转的时候 需要name
path('book/<int:id>', views.index3,name="book"),url 可以从外部导入 includepath('movie/', include(movie.urls) ,name="book"),app_name 取名路由反转 reverse模板渲染
DTL   django template language
jinja2渲染html文件,注意 在setting文件里,把模板包含的路径设置正确
render_to_string模板查找路径的配置、模板中也可以使用参数常用的标签{% if   %}
{% else if     %}
{% endif     %}for in 标签{% for in   %}{% endfor     %}reversed 可以反向遍历
forloop.counter 得到当前遍历的下标注意:for  循环中不存在continue 和break 用法with 标签 定义变量
url  标签,点击可以跳转
<a href=”%url ‘baidu’%”>模板常用过滤器
add 
cut 将字符串中所有的指定字符删掉
date 将日期按照指定格式显示
default 默认参数
stringtags 删除字符串中所有的html标签incldue  应用其他的模板
block 模块
extends 继承 必须放在第一行如何加载静态文件 css  js
<load static>
<scripts>加载js脚本django 如何使用编程语言pyhton连接数据库。orm模型
navicate 可视化操作数据库
pip install  pymysql

gunicorn 是部署django应用的工具。

1.10 前端html

学习html的免费网站 MDN  w3c W3school。


<marquee> 跑马灯效果 </marquee>
<input> 输入框 单标签,不是成对出现    也可以写成<input/>
标签可以嵌套
<marquee> 跑马灯效果<input></marquee>
在标签里可以添加标签属性,比如设置跑马灯为1次
<marquee loop=”1”> 跑马灯效果 </marquee>
<input type=”password”>
<input disable>
<title>网页的标签字符编码 <meta charset=”utf-8”> 加在head头里
文档声明 html文档的第一行加入 <doctype html>
vs code 如何快速添加注释: 将光标放在当前行,ctrl+/
如何设置网页语言 <html lang=”en”> 设置为英语
<html lang=”zh-cn”> 中文简体
快捷键,vscode如何快速删除某一行, ctrl+shift+k
如何设置网页的图标 将ico文件放到html的同级目录
<h1>为一级标题 。。。。。<h6>为6级标题 
<p>为段落标签
<div> 容器 包裹多个标签,比如
<div>   <p>  </div>
<input> 与 <span> 是行内元素 在一行显示
块内元素既可以写块内元素,也可以写行内元素
行内元素内部仅仅可以写行内元素p 标签中不鞥写块元素
常用的文本标签 <em> 着重标记的内容
<strong>也是着重显示的内容
不常用的文本标签
<cite>作品标签
<dfn>专有名词
<del> <ins>删除与插入文本
<sub> <sup>上标与下标
<code>代码
<samp>设备输出
<kdb> 键盘文本
<abbr> 
<bdo>反转文本
<var>标记变量 与code 一起使用
<address>地址信息
<img>图像标签 可以引用别的网站的图像资源,如果设置了防盗链,则不能引用
超链接 <a href=””> 跳转的时候可以在新 旧页签中打开
<a href=”” target=”_blank”> 在新页签中打开
<a href=”” target=”_self”> 在当前页签中打开
<a>标签里面不能有a 标签
<download>直接触发下载
设置描点 
<a href=”#xxx”> 必须有#号键
<p name=”xxx”>
<p id=”xxx”><a href=”#”>  回到顶部
<a href=””>   刷新页面
<a href=”tel:123456789”>  点击拨打电话
<a href=”msm:10086”>  发送短信
<a href=”mailto:123456789@qq.com”>  发送邮件有序列表
<ol> <li>
</ol>无序列表
<ul> <li>
</ul>自定义列表
<dl> <dt><dd> 描述
</dl>无论是ul 还是ol 内部最好使用li ,不能使用其他标签
自定义标签的应用场景:页面最下方合作单位信息等表格属性
<table>
<caption>
<tbody>
<thead>
<tr> row
<th>
<td> 
<tfoot>换行标签<br>
<hr>分割线表单  收集与用户交互
<inform>
<button>登录 注册
单选 多选
<checkbox>
<textarea> 文本域
<select> 下拉框
disable 禁用表单
<label>标签 可以跳转到输入框
<iframe>嵌入 其他的网站
iframe最大的作用 嵌入广告
<meta>元信息 配置网页的描述信息

1.11 前端样式css

css样式可以调整颜色,字体大小等color,font-size
<style>h1{color:red;font-size:80px;}
</style>
<style>标签  需要写到head里行内样式:在html的标签里,可以直接加样式
内部样式:把样式写在html的特定位置,<style>中
外部样式:引用外部文件  <link rel=”stylesheet” href=”xxx.css”>优先级: 行内样式>内部样式=外部样式 后面的覆盖前面的img{width:256 px;
}css中的注释和c++ 很像 /*  注释部分 */
开发时 展开风格,多行展示; 上线时,紧凑风格,一行展示,减少文件的体积 webpack
*{通配选择器
}类选择器
.dog{}
<class=”dog”>
<class=”dog big”> 类别中可以写多个类
id 选择器 最好不要加空格
#id{}
<id=”dog”>交集选择器
p.rich {}.big.rich {}<p class=”rich”>
<p class=”big”>p.rich# wangcai
<p class=”big” id=”wangcai”>并集选择器 竖着写
#id
.big,
.rich,
{}后代选择器
ul 中的 li{}<ul><li>
</ul>子代选择器
div>a  只包括儿子兄弟选择器
div+p 与div紧紧相连的兄弟p通用兄弟选择器
div~p属性选择器 具有 title属性的元素
[title]{}[title=”a”] title和”a”相等
[title^=”a”] 以a开头
[title$=”a”] 以a结尾
[title*=”a”]  只要有a就行a:link 还没访问过
a:visited 访问过
a:hover 选中正在访问
a:active 激活的 
<a ref=””>获取焦点 输入框
input:focus{}
<input >div>p:first-child<div><p> 张三 98<p> 李四 97<p> 王五 100
</div>
p:first-child 是p ,且 是第一个孩子div>p:nth-child(3) 第三个儿子
div>p:nth-child(2n)  2的倍数
div>p:nth-child(-n+5) 前5个   一定要写成an+bdiv>p:first-of-type 找第一个p
div>p:nth-of-child(3) 正数第三个
div>p:nth-of-child(-3) 倒数第三个选中的是没有内容的div
div:empty{}否定选择器
div>p:not(.fall) class 为fall的类UI选择器
input:checked{ 复选框选中则变大}目标伪类
targetdiv::first-letter 第一个字母
div::first-line 第一行
div::selection 鼠标选中
input::placeholder{}行内> 类选择器> 元素选择器> 通配选择器选择器权重!important  提高权重font-family  a b c d e字体可以设置多个
font-size
font-style 风格 倾斜 normal italic    oblique
font-weight  粗细 lighter 细的 normal bold 粗的
字体复合写法 font:bold 100px “微软雅黑”letter-spacing 字体间距text-decorate 文本修饰 : line-through删除线  overline上划线  underline下划线
dotted 虚线 wavy  波浪线 
文本缩径 :首行缩进 text-indent 
如果想要空出2个文字大小,则2*font-size 文本对齐方式: text-align 左中右 默认为左
font-size 字体设计框高
height 整体容器的高度
line-height 行高 行高一般为字体的1.5倍左右
line-height 1.5 意思是font-size的1.5倍
如果没有设置height,height为line-height*行数
vertical-align:top  bottom  middle baseline基线
列表相关的属性
list-style-type:none  squre 方块  decimal 数字
list-style-position  inside
list-style-image
复合属性 list-styletable{border-width  边框宽度border-color 边框颜色border-style 实线
}
简写
border:2px  green solidtable 属性
边框的整体
table{border-width  边框宽度border-color 边框颜色border-style 实线widthtable-layout auto 文字多 列变宽border-spacing 单元格之间的间距border-collapse 合并相邻单元格的边框empty-cells 影藏没有内容的单元格caption-side top  设置表格标题的位置
}图像当背景
background-color
background-image: url设置背景的重复方式
background-repeat no-repeat
background-repeat repeat
background-repeat repeat-x x方向重复
background-repeat repeat-ybackground-position : left top center
background-position :10px 20px相对于左上角
background 复合属性: 鼠标相关的属性
cursor:wait 等待 转圈圈
cursor:move 拖动 移动
cursor:help 帮助
cursor:pointer 鼠标变成小手em 倍速 *font-size ,如果缺少 font-size字段,找父元素的font-size
rem root相对根字体大小 找到祖师爷的字体大小
50% 相对于父元素尺寸行内元素 inline <span> 不可以通过 width height 设置宽高
块元素 block 独占一行  可以通过 width height 设置宽高
行内块元素 inline-block 兼顾以上两个优点
display:block  将行内元素以块元素显示 inline-blockcss 常用长度单位
margin 页边距盒子模型
内容区 边框padding border边框  margin外边距 宽度的最小值,最大值 。缩放浏览器,宽度会变化
高度的最小值,最大值。
默认宽度 不设置宽度的情况下的宽度 padding-left
padding-right
padding-top
padding-bottom
padding: top,right,bottom,left 上右下左行内元素的上下边距不能完美设置,左右边距可以设置border-width
border-color 
border-style
复合属性 border: width color styleborder-left-width
border-left-color 
border-left-style 实线 虚线 
border-left: 复合属性 margin: 复合属性 10 20 30 40 
margin-top 自己往下移动
margin-left自己往右移动
margin-right下一个元素往右移动
margin-bottom 自己不移动
行内元素设置 margin-top margin-bottom没有效果
margin-left auto 距离左边能有多远就有多远
margin-right auto 距离右边能有多远就有多远
margin-left auto margin-right auto  水平居中margin 塌陷问题
第一个子元素 margin-top
最后一个子元素 margin-bottom 被父容器抢走
如何处理内容的溢出
overflow  hidden 溢出之后隐藏
overflow auto 滚动条消失
overflow  scroll 超出部分滚动条
解决方案 给父容器加 border 设置 margin 合并 只存在上下铺之间 不存在左右之间 max(val1,val2)
使用float:left 浮动可以解决隐藏元素的两种方式
display none 虽然内容消失了,还是占据位置
visibility  hidden 默认为show样式的继承
子继承父  有些能继承 有些不能继承
背景色不能继承
和字体相关的基本可以继承
超链接 p1-p6 h body都有默认样式行内元素的空白问题行内块元素的幽灵空白问题浮动 文字环绕图像 float left
弹性盒子clear left 清除浮动效果 父元素的高度不塌陷
clear right
clear both 使用前提 自己是个好人position relative
相对于定位之前的位置
left:50 右移50
相对定位不脱离文档流
开启定位的元素 层级更高 压在其他元素身上
同时开启定位的元素,后写的压在先写的身上绝对定位 
什么是包含块?
如果没有脱离文档流的元素:父元素为包含块
脱离文档流:第一个开启定位的祖先元素
子绝父相
绝对定位的元素和浮动不能共存
固定定位 视口的左上角粘性定位  position sticky定位的层级定位可以越过padding网页布局
版心 排版的中心

1.12 javascript

打开浏览器,按住F12,可以打开开发者模式
javascript 操控浏览器的编程语言html插入js代码块
type 可以省略
<script type=”text/javascript”>var num=10;
</script>
如何输出日志
console.log(num) 打印日志到控制台
alert(“对话框”) 弹出对话框
prompt()弹出对话框,输入文本
var a=prompt()
document.write(“输出到页面”)可以将js代码写到标签的onclick 属性中
<button>点我一下</button>
<button onclick="alert('讨厌')">点我一下</button>也可以将js代码写到href超链接属性中
<a href="javascript:alert('哈哈哈')">点我一下</a>html引入外部js文件
< script  type=”text/javascript”   src=”./xxx.js”>
</script>
如何添加注释
js 注释和c++一样  多行注释/*  */     单行注释  //javascript 的数据类型分为基础数据类型和复合数据类型
基本数据类型
数值   number
Infinity 无穷大
-Infinity 无穷小
Number.MAX_VALUE	
Number.MIN_VALUE	如果用js进行小数运算,可能结果不精确
字符串 string
字符串多个引号“”嵌套时 使用\转义
布尔  boolean
var bl=false;
console.log(typeof bl) 返回boolean
null 空值
underfined 未定义
NaN not a number
两个字符串相乘 返回nan强制类型转换
将其他数据类型转化为staring
var a=123
var b=String(a)
var c=a.toString()
null underfined不能使用toString()
String(null) 返回”null”
String(underfined) 返回”underfined”如果将字符串转化为number
var s=”123”
使用Number()函数
var b=Number(s)parseInt()
parseFloat()其他进制 16进制 0x123
0开头是8进制
0b 是2进制
parseInt(a,10) 以10进制返回
js中使用 \u 16进制 表示unicode编码
html中使用&# 十进制数字var a,b,c;
var a=1,b=2,c=3;outer:
for(var i=0;i<13;i++)
{inner:for(var i=0;i<13;i++){break outer;}
}
break可以不跳出最近的循环,使用标签标记循环体
continue 也可以加标签计时器:
console.time(“test”)
console.timeEnd(“test”)复合数据类型
object 引用数据类型 和c++的struct很像 python的字典 dict
对象字面量
var user={age: ,name:,
}创建对象
var obj=new Object();
obj.name=”zhangsan”
obj[“123”]=789
删除对象属性名
delete obj.name属性名 in  obj声明变量
var a=123;
var a=null;
var a=underdefined;js内嵌关键字 保留字
var func break do instanceof typeof case if  else  new catch
finally return void continue for switch while default throw
delete in try function this with false true null debuggertypeof 运算符   检测数据类型
如果是自定义类型,则是object类型算术运算符
赋值运算符
比较运算符  
布尔运算符 == 
=== 严格等于 数据类型也必须相等
!=   
!==    if语句
if else
switch
循环语句 for while字符串
str.chatAt(0)
str.concate(str2,str3)
如果参数不是字符串,则 concate将其转化为字符串
’’. concate 空字符串也可以使用concate子串  substring
substr 从字符串开始位置算起,第二个参数为子串的长度indexof 第一次出现的位置
trim 去掉字符两端的空格 制表符 换行符
split 方法 
数组
var arr=new Array()
var arr=new Array(10)创建长度为10的数组
arr[0]=10
arr[1]=22数组对象方法var arr=[]
var arr=[1,2,3]
数组中可以放置不同类型的数 也可以是对象
数组的遍历 for循环
arr.forEach(func(a,b,c))数组中有几个元素,函数执行几次
arr中的元素 传入到函数中 a为元素 b为索引 c为数组整体
slice(开始位置,结束位置) 切片 [)左闭右开
splice(start,count) 删除count个元素正则表达式
var reg=new RegExp(‘a’); 字符串中是否有a
var str=’a’;
test()为方法
reg.test(str)DOM 通过js操作网页
documemt.getElementByID(“id”)
onload事件会在整个页面加载结束之后触发
window.onload 
getElementsByTagName 获得一组元素
getElementsByName获得一组元素
childNOde 包含空白节点
空白节点也是节点
children不包含空白获取父节点和兄弟节点
parentNode
previousSiblingvar all=dovument.all
所有的元素
嵌套数组
数组的遍历
数组静态方法 isArray()
数组 push   pop
shift删除数组的第一个元素   
unshift 数组的第一个位置添加元素
join.(“|”)  数组转化为字符串
reverse 数组反转
indexof 查找第一次出现的位置函数
function add(x,y){return x+y;
}立即执行函数
(function(){return 1+2;
})();(function(a,b){return a+b;
})(12,34);枚举对象中的属性
for x in obj
for(var n in obj)
{console.log(obj[n])
}全局作用域 界面打开时创建 销毁时关闭
window窗口 为全局作用域
var a=10;
console.log(window.a);
console.log(window.fun());
window.alert(“------”)js可以在函数声明之前调用函数 ,函数可以写在使用之后函数作用域构造函数首字母大写
构造函数需要使用 new 调用
instanceof  xxx是yyyy的实例每创建一个函数,解析器都会向函数中添加一个属性 prototype
原型对象哈希表
key-valuevar user={name:”zhangsan”,age:13,
}
user.namerandom 0<= && <1  floor   ceil
Date对象
Date.now()DOM概述 文档对象模型  js操作网页的接口
DOM的最小组成单位叫做节点BOM 
document 整个文档树
document.getElementByTagName()
读取元素
创建元素

1.13 django 中migration 中的文件,由以下命令生成。数据迁移模型

# 1. 创建迁移文件(检测模型变化)
python manage.py makemigrations
# 生成类似 myapp/migrations/0002_auto_20230101_1234.py 的文件

1.14 requirements.txt 中引入的python 模块以及作用

alibabacloud_dysmsapi20170525==2.0.24  #阿里云提供的 短信服务
alibabacloud_tea_openapi               #是阿里云官方提供的 核心 SDK 工具库,用于简化阿里云 OpenAPI 的调用流程。它是阿里云各类 SDK(如 alibabacloud_dysmsapi)的基础依赖
amqp==5.1.1                            #AMQP(Advanced Message Queuing Protocol,高级消息队列协议)是一种开放标准的消息协议,用于在应用程序或系统之间异步、可靠地传输消息。
appnope==0.1.3                         #专门用于在 macOS 系统上禁用或管理 AppNap 机制,确保某些 Python 程序(如科学计算、实时任务、GUI 应用等)不会被系统自动限制资源。
asgiref==3.7.2                         #主要用于支持 ASGI(Asynchronous Server Gateway Interface) 协议。它是 Django 生态的核心组件之一,但也广泛用于其他异步 Python Web 开发场景
async-timeout==4.0.2                   #用于为异步操作设置超时时间,防止异步任务因长时间未完成而阻塞整个程序
backcall==0.2.0                        #主要用于简化回调函数(callback)的实现,特别是在交互式环境(如 Jupyter Notebook、IPython)中。它的核心功能是提供一种灵活的方式来管理回调函数的签名和调用,使回调机制更直观、易用。
billiard==4.1.0                        #Python 的一个多进程管理库,本质上是 multiprocessing 模块的一个功能增强版分支,最初为 Celery(分布式任务队列)开发,旨在解决原生 multiprocessing 的局限性。
celery==5.3.1                          #分布式框架
certifi==2022.6.15                      #其核心作用是提供 Mozilla 官方维护的根证书集合(CA Certificates),用于在 SSL/TLS 加密通信中验证服务器证书的合法性
charset-normalizer==2.1.0              #用于自动检测文本的字符编码(如 UTF-8、GBK、ISO-8859-1 等),并将其转换为目标编码(默认是 UTF-8)
click==8.1.3                           #命令行工具开发库,用于快速创建功能丰富、易用的命令行界面(CLI)。它由 Flask 的作者 Armin Ronacher 开发,以简洁的 API 和高度可扩展性著称。
click-didyoumean==0.3.0
click-plugins==1.1.1                   #是一个用于 扩展 Click 命令行工具插件系统 的 Python 库。它允许开发者将多个 Click 应用作为 插件 动态加载到主 CLI 程序中,类似于 pip、docker 或 kubectl 的插件机制。
click-repl==0.3.0                      #Click-REPL 是 Click 命令行框架的一个扩展,为 Click 应用添加了交互式 REPL (Read-Eval-Print Loop) 功能。
coreapi==2.3.3                         #用于 构建和交互基于超媒体(Hypermedia)的 Web API,它提供了一种标准化的方式来描述、请求和解析 RESTful API,特别适合动态 API 客户端和自动化工具。
coreschema==0.0.4                      #coreschema 是 Python 中一个用于 API 数据验证和模式描述 的库,通常与 coreapi 配合使用,用于定义和验证 Web API 的输入/输出数据结构。它的核心功能是提供一种 声明式的方式描述数据格式,并支持动态验证。
cron-descriptor==1.4.0                 #用于 将 Cron 表达式(定时任务表达式)转换为人类可读的描述。它可以帮助开发者或用户更容易理解 Cron 表达式的含义
decorator==5.1.1                       #用于 简化装饰器(Decorator)的创建和管理。它的核心功能是提供 @decorator 装饰器工厂,帮助开发者更优雅地编写装饰器,同时保留原函数的元数据(如 __name__、__doc__ 等),并减少样板代码。
Django==3.2.20                           #web开发框架
django-celery-beat==2.5.0                #用于为 Celery(分布式任务队列)提供 动态、可持久化的定时任务(Periodic Tasks)管理
django-celery-results==2.5.1            #用于将 Celery 任务执行结果 存储到 Django 数据库(或其他后端),提供任务状态跟踪、结果查询和历史记录功能。
django-cors-headers==3.13.0             #用于处理跨域资源共享 (CORS) 的响应头,让你的 Django 后端能够安全地接受来自不同域的请求
django-picklefield==3.1                  #允许你存储 Python 对象到数据库中(通过 pickle 序列化)。 
django-redis==5.3.0                     #
django-timezone-field==5.1               #用于存储 pytz 时区对象
djangorestframework==3.13.1             #用于构建 Web API 的强大而灵活的工具包
djangorestframework-simplejwt==5.2.0    #JSON Web Token 认证的 Django REST Framework 插件,是 DRF 的 JWT 认证实现中最流行的选择。
drf-yasg==1.21.3                        #可以自动从你的 DRF 代码生成 API 文档
Flask==2.2.2  #
gevent==21.12.0                         #是一个基于协程的 Python 网络库,使用 greenlet 在 libev 或 libuv 事件循环之上提供高级同步 API。
greenlet==1.1.3                         #一个轻量级协程库,为 Python 提供了轻量级的"微线程"实现,是 gevent 的核心依赖。
gunicorn==20.1.0                        #是一个 Python WSGI HTTP 服务器,用于部署 Python Web 应用(如 Django、Flask)。
idna==3.3                               #用于处理国际化域名(包含非ASCII字符的域名)的标准协议。
importlib-metadata==4.12.0              #
inflection==0.5.1                        #用于处理英文单词单复数转换、大小写转换、下划线/连字符转换等文本变形操作的 Python 库。
ipython==7.34.0                         #
itsdangerous==2.1.2                     #用于在不可信环境中安全传输数据的 Python 库,常用于生成和验证安全令牌、签名 cookies 等场景。
itypes==1.2.0                           #供了一些有用的接口类型定义,主要用于类型注解和接口检查。
jedi==0.18.1                            #Jedi 是一个强大的 Python 代码自动补全和静态分析库,被许多 IDE 和编辑器(如 VS Code、Sublime Text 等)用作 Python 代码智能支持的后端。
Jinja2==3.1.2                           #模仿 Django 模板但添加了更强大的功能
kombu==5.3.1                            #Kombu 是一个 Python 消息队列库,是 Celery 的底层消息传输库。它提供了高级的消息队列抽象,支持多种消息代理(AMQP、Redis、Amazon SQS 等)
MarkupSafe==2.1.1               #专门用于处理 HTML/XML 的字符串安全转义,是 Jinja2、Flask 等模板引擎的底层依赖。
matplotlib-inline==0.1.3        #是一个 Jupyter Notebook/IPython 的扩展,用于在 notebook 单元格中直接显示 matplotlib 图形,而无需调用 plt.show()。
mysqlclient==2.1.1              #
numpy==1.21.6                   #
openapi-codec==1.3.2            #用于处理 OpenAPI/Swagger 规范的工具,提供编码解码和验证功能
opencv-python==4.6.0.66         #
packaging==21.3                 #打包(packaging)是将Python代码和资源组织成可分发格式的过程,以下是现代Python打包的核心知识体系。
parso==0.8.3                    #Python 解析器库,主要用于静态分析 Python 代码,是 Jedi(自动补全工具)的核心依赖。
pexpect==4.8.0                  #用于控制和自动化其他程序的交互式命令行工具,类似于 Unix expect 的 Python 实现。
pickleshare==0.7.5              #小型 Python 数据库,使用 Python 的 pickle 模块实现简单的键值存储,特别适合小型项目和快速原型开发。
Pillow==9.2.0                   #
prompt-toolkit==3.0.39          #用于构建强大交互式命令行应用的 Python 库,被 IPython、pgcli 等知名项目采用。
ptyprocess==0.7.0               #用于启动和控制伪终端(PTY)中的子进程,是终端模拟器和交互式命令行工具开发的基础组件。
Pygments==2.12.0                #语法高亮工具,支持超过 500 种编程语言和标记语言的着色显示。
PyJWT==2.4.0                    #JSON Web Tokens (JWT) 实现库,用于生成和验证符合 RFC 7519 标准的令牌。
pyparsing==3.0.9                #用于创建和执行文本解析器,特别适合处理复杂文本格式和领域特定语言(DSL)。
python-crontab==3.0.0           #用于操作 Unix/Linux crontab 文件的 Python 库,可以方便地创建、修改和删除 cron 作业。
python-dateutil==2.8.2          #日期相关
pytz==2022.1                    #时区 时间相关
redis==4.6.0                    #消息队列中间件
requests==2.28.1                #requests请求
rtsp==1.1.12                    #视频流
ruamel.yaml==0.17.21            #功能最全面的 YAML 1.2 处理器,完美支持 round-trip(往返)加载和保存 YAML 文件,保留所有原始格式细节。
ruamel.yaml.clib==0.2.6         #
Shapely==1.8.5.post1             #处理几何对象的顶级库,提供高效的几何运算和分析功能,基于 GEOS (Geometry Engine - Open Source) 库实现。
simplejson==3.17.6               #
six==1.16.0                      #解决python2与python3兼容性问题
sqlparse==0.4.2                  #
traitlets==5.3.0                 #为 Python 类提供强大的属性系统,是 Jupyter 项目的核心组件之一,特别适合构建可配置的应用程序和库。
typing_extensions==4.3.0         #Python 标准库 typing 的扩展,为旧版 Python 提供新类型提示功能的向后兼容支持,同时引入实验性类型功能。
tzdata==2023.3                   #Time Zone Database (tzdb)
uritemplate==4.1.1               #uri 模板
urllib3==1.26.11                 #
vine==5.0.0                      #Celery's Messaging Library
wcwidth==0.2.5                   #
websockets==11.0.3               #web 应用开发
Werkzeug==2.2.2                  #用于 Python 的 WSGI(Web Server Gateway Interface)工具库,为 Web 应用开发提供底层支持。它是 Flask 框架的核心依赖,但也可以独立使用,用于构建自定义 Web 服务器、中间件或框架。
zipp==3.8.1                      #主要用于 高效地处理 ZIP 文件,特别是与 Python 的 zipfile 标准库结合使用时,提供更便捷的路径操作和兼容性支持。
zope.event==4.5.0                #轻量级的事件系统,属于 Zope 生态系统的一部分,用于实现 观察者模式(Observer Pattern),允许对象之间通过事件进行松耦合通信。
zope.interface==5.4.0            #

1.15 web应用服务基本原理

tomcat、socket, IO流

思路:
启动socket服务,循环接收浏览器请求
接收到请求之后,将流中的数据取出
判断目标资源是否存在,若不存在,返回404
存在,则输出给客户端需要实线类:
server 开启socket服务
reuqest 封装请求
response 应答
test 测试类Tomcat默认端口8080

1.16 rtsp 与rtmp

RTMP用途:主要用于低延迟的实时视频流传输,如直播、视频聊天等。特点:基于TCP,强调稳定的连接和流畅的播放,但延迟通常较高(2-5秒)。场景:常见于Adobe Flash时代的直播(如Twitch早期),现仍用于部分直播推流(如OBS推流到CDN)。
RTSP用途:专注于控制实时媒体流的播放(如暂停、快进),常用于监控摄像头、视频会议等。特点:本身不传输数据,而是通过RTP(Real-Time Transport Protocol)传输音视频流,支持UDP以降低延迟(可低于1秒)。场景:IP摄像头、安防系统、视频监控(如海康威视设备)。

1.17 工程中python代码

import gevent.monkey
gevent.monkey.patch_all()
猴子补丁 遇到IO流快速切换 遇到time.sleep起作用django  中的manage用于项目管理:
用于启动开发服务器、创建数据库表、执行数据库迁移等。drf_yasg:生成API 2.0 文档的工具import asyncio
asyncio 是 Python 的异步 I/O 框架,用于编写单线程并发代码,特别适合处理高 I/O 密集型任务(如网络请求、文件读写、数据库查询等)import pytz
处理时区的流行库,它提供了 IANA 时区数据库(Olson 数据库) 的接口,用于精确处理全球各地的时区转换问题。cvid摄像头id
mid 地图id
pid 人员
tid ?Python 中的 sqlite3.connect() 函数详解
from sqlite3 import connect 
是 Python 标准库中用于连接 SQLite 数据库的核心函数,它创建或打开一个 SQLite 数据库连接,返回一个 Connection 对象用于后续数据库操作。# 创建/连接数据库(如果不存在会自动创建)
conn = connect('example.db')  # 返回Connection对象
# 执行SQL操作
cursor = conn.cursor()
cursor.execute("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)")
conn.commit()  # 提交事务
# 关闭连接
conn.close()

未完待续...

相关文章:

web应用开发说明文档

工程目录结构 FACTORY--bin #网络流可执行程序 参考后文1.1部分文字说明webrtc-streamer--deployment #部署相关的配置--mysql #参考1.3 mysql数据库详细说明--conf #存放mysql的配置文件--data #存放pem加密…...

快速搜索与管理PDF文档的专业工具

软件介绍 在处理大量PDF文档时&#xff0c;专业的文档管理工具能显著提升工作效率。这款工具能够帮助用户快速检索PDF内容&#xff0c;并提供了便捷的合并与拆分功能&#xff0c;让复杂的PDF操作变得简单高效。 多文件内容检索能力 不同于传统PDF阅读器的单文件搜索局…...

在GPU集群上使用Megatron-LM进行高效的大规模语言模型训练

摘要 大型语言模型在多个任务中已取得了最先进的准确率。然而,训练这些模型的效率仍然面临挑战,原因有二:a) GPU内存容量有限,即使在多GPU服务器上也无法容纳大型模型;b) 所需的计算操作数量可能导致不现实的训练时间。因此,提出了新的模型并行方法,如张量并行和流水线…...

NocoDB:开源的 Airtable 替代方案

NocoDB&#xff1a;开源的 Airtable 替代方案 什么是 NocoDB&#xff1f;NocoDB 的主要特点丰富的电子表格界面工作流自动化应用商店程序化访问 NocoDB 的应用场景使用 Docker 部署 NocoDB1. 创建数据目录2. 运行 Docker 容器3. 访问 NocoDB 注意事项总结 什么是 NocoDB&#x…...

关于Python:7. Python数据库操作

一、sqlite3&#xff08;轻量级本地数据库&#xff09; sqlite3 是 Python 内置的模块&#xff0c;用于操作 SQLite 数据库。 SQLite 是一个轻量级、零配置的关系型数据库系统&#xff0c;整个数据库保存在一个文件中&#xff0c;适合小型项目和本地存储。 SQLite 不需要安装…...

修改ollama.service都可以实现什么?

通过修改 ollama.service 系统服务单元文件,可以实现以下核心配置变更: 一、网络与访问控制 监听地址与端口 通过 Environment="OLLAMA_HOST=0.0.0.0:11434" 修改服务绑定的 IP 和端口: 0.0.0.0 允许所有网络接口访问(默认仅限本地 127.0.0.1)。示例:改为 0.0.…...

k8s笔记——kubebuilder工作流程

kubebuilder工作流程 Kubebuilder 工作流程详解 Kubebuilder 是 Kubernetes 官方推荐的 Operator 开发框架&#xff0c;用于构建基于 Custom Resource Definitions (CRD) 的控制器。以下是其核心工作流程的完整说明&#xff1a; 1. 初始化项目 # 创建项目目录 mkdir my-opera…...

长江学者答辩ppt美化_特聘教授_校企联聘学者_青年长江学者PPT案例模板

WordinPPT / 持续为双一流高校、科研院所、企业等提供PPT制作系统服务。 长江学者特聘教授 “长江学者奖励计划”中的一类&#xff0c;是高层次人才计划的重要组成部分&#xff0c;旨在吸引和培养具有国际领先水平的学科带头人。特聘教授需全职在国内高校工作&#xff0c;是高…...

Vscode/Code-Server 安装中文包——CI/CD

前言 啊好多人问我怎么还不更新&#xff0c;其实本月是已经写了一篇测评的&#xff0c;但是鉴于过于超前会给产品带来不好的影响&#xff0c;所以就没有公开。那么既然这样本月就再更新一篇。 首先 声明 一点&#xff0c;安装中文包的初衷不是看不懂英文&#xff0c;也不是对…...

【信息系统项目管理师-论文真题】2012上半年论文详解(包括解题思路和写作要点)

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 试题1:论信息系统工程的风险管理1、写作要点2、解题思路对项目风险的认识和项目风险管理的基本过程、主要方法、工具信息系统项目最主要的风险是什么试题2:论信息系统工程项目可行性研究1、写作要点2、解题思…...

PowerPC架构详解:定义、应用及特点

一、PowerPC架构的定义 PowerPC&#xff08;Performance Optimization With Enhanced RISC – Performance Computing&#xff09; 是一种由IBM、摩托罗拉&#xff08;现NXP&#xff09;和苹果于1991年联合开发的精简指令集&#xff08;RISC&#xff09;处理器架构&#xff0c…...

IP伪装、代理池与分布式爬虫

一、动态代理IP应用&#xff1a;代理池的获取、选择与使用 代理池技术的核心是通过动态切换IP地址&#xff0c;让爬虫看起来像不同用户在访问网站&#xff0c;从而规避封禁。 &#xff08;一&#xff09;代理池的获取途径 1. 免费代理&#xff1a;低成本但高风险 免费代理可…...

【Arthas】火焰图优化应用CPU(问题原因:获取调用栈)

优化场景总结归纳 1. 问题背景 现象&#xff1a;在公共搜索功能中&#xff0c;火焰图分析发现 获取Java调用栈&#xff08;StackTrace&#xff09; 占用了约 6%的CPU&#xff08;日常流量下&#xff09;&#xff0c;系统高负载时占比更高。原因&#xff1a; 每次外部API调用时…...

回溯算法详解(Java实现):从组合到排列的全面解析

引言 回溯算法是一种强大的算法思想&#xff0c;广泛应用于解决各种组合优化问题。它通过系统性地尝试所有可能的解&#xff0c;并在发现当前路径无法得到解时立即回溯&#xff0c;从而高效地找到问题的解。在本文中&#xff0c;我们将深入探讨回溯算法的核心思想、三要素、通…...

【BLE】【nRF Connect】 精讲nRF Connect自动化测试套件(宏录制、XML脚本)

目录 前言 1. nRF Connect自动化测试介绍 1.1. nRF connect宏录制功能介绍 1.2. 电脑端XML方式 1.3 实际应用案例 1.3.1 BLE 稳定性测试 1.3.2 设备固件更新(DFU)测试 1.3.3 批量设备配置 1.4 操作步骤 1.5 注意事项 2. nRF Connect日志记录 2.1. 日志记录功能 …...

springboot war包tomcat中运行报错,启动过滤器异常,一个或多个筛选器启动失败。

错误信息&#xff1a; "level": "ERROR", "thread": "localhost-startStop-1", "class": "o.a.c.c.C.[.[localhost].[/Crmeb-admin]", …...

基于开源AI大模型与AI智能名片S2B2C商城小程序的线上活动执行优化研究

摘要&#xff1a;本文以开源AI大模型、AI智能名片及S2B2C商城小程序为技术载体&#xff0c;探讨线上活动执行阶段的效能提升路径。通过分析某科技展会案例&#xff0c;发现AI智能名片可将参会者信息采集效率提升60%&#xff0c;S2B2C商城小程序的21链动模式使活动裂变传播速度提…...

解决奥壹oelove婚恋原生小程序上架问题,彻底解决解对问题增强版旗舰版通用

现在很多客户还不了解OElove小程序上架流程&#xff01;因为很多用户对技术无感&#xff01;随意上架工作都是要靠官方来辅助&#xff01;这样在在二开性就会失去很多主动权&#xff01;本人商业用户有全新原生态小程序源码&#xff08;注意&#xff1a;这是原生非Uniapp&#…...

Java SE(7)——类和对象(二)

1.包(package) 1.1 包的定义 在Java中&#xff0c;包是一种用于组织和管理类&#xff0c;接口和其他包的机制。主要作用是防止命名冲突&#xff0c;并提供一种访问控制机制 1.2 package关键字 package关键字的主要作用是声明当前类在哪个包里面。 当然&#xff0c;用户也可以…...

Python 装饰器优化策略模式:电商促销折扣的优雅解法

问题背景&#xff1a;促销策略的重复陷阱 在电商促销系统中&#xff0c;我们曾面临这样的痛点&#xff1a; promos [fidelity_promo, bulk_item_promo, large_order_promo] # 6.1节原始方案 def best_promo(order):return max(promo(order) for promo in promos)当新增new…...

redis延时队列详细介绍

Redis延时队列是一种利用Redis数据结构的功能来实现延时任务调度的方法。在Redis中&#xff0c;常用的数据结构包括List&#xff08;列表&#xff09;和Sorted Set&#xff08;有序集合&#xff09;。延时队列通常是通过有序集合来实现的。 具体实现步骤如下&#xff1a; 将延…...

PHP 开发工程师如何借助 DeepSeek 提升工作效率

在当今数字化时代&#xff0c;PHP 开发工程师面临着不断提高工作效率和应对复杂项目需求的挑战。DeepSeek 作为一款先进的人工智能工具&#xff0c;为 PHP 开发工程师提供了一系列强大的功能&#xff0c;能够显著助力其日常工作。从代码生成与优化&#xff0c;到文档撰写和知识…...

Vibe Coding 新时代:AI 辅助编程完全指南

第一章:什么是 Vibe Coding?AI 编程的新范式 在传统编程的世界里,程序员需要掌握语法、算法和框架,一行一行地编写代码。但随着人工智能的快速发展,一种全新的编程方式正在兴起——这就是 Vibe Coding(氛围编程)。 Vibe Coding 的定义 Vibe Coding 是由 AI 研究者 An…...

Oracle RAC ‘Metrics Global Cache Blocks Lost‘告警解决处理

1. 引言&#xff1a; 前段时间鄙人检查处理过Oracle RAC Metrics Global Cache Blocks Lost’告警&#xff0c;在此总结分享下针对该报警的原因分析及处理办法。 2. 具体事件 通过排查发现造成该告警的原因是共享存储控制器损坏导致的。由于发生已经有段时间了&#xff0c;没…...

Go语言入门基础:协程

第21章 协程 目录 21.1 启动Go协程 协程的概念与特点启动协程的方法及示例协程执行顺序的控制 21.2 通道 通道类型及表示方式21.2.1 实例化通道21.2.2 数据缓冲21.2.3 单向通道21.2.4 通道与select语句 21.3 互斥锁 协程并发访问的逻辑问题互斥锁的使用示例 21.4 WaitGroup类…...

Servlet+tomcat

serverlet 定义&#xff1a;是一个接口&#xff0c;定义了java类被浏览器&#xff08;tomcat识别&#xff09;的规则 所以我们需要自定义一个类&#xff0c;实现severlet接口复写方法 通过配置类实现路径和servlet的对应关系 执行原理 当用户在浏览器输入路径&#xff0c;会…...

中间件和组件

文章目录 1. 前言2. 中间件介绍3. 组件介绍4. 区别对比5. 简单类比6. 总结 中间件和组件 1. 前言 中间件和组件是软件开发中两个重要的概念&#xff0c;但它们的定位和作用完全不同。中间件解决的事通信、跨系统、安全等问题&#xff0c;组件是解决具体业务模块&#xff0c;提高…...

piccolo-large-zh-v2 和 bge-m3哪个效果好?

环境&#xff1a; piccolo-large-zh-v2 bge-m3 问题描述&#xff1a; piccolo-large-zh-v2 和 bge-m3哪个效果好&#xff1f; 解决方案&#xff1a; 比较Piccolo-large-zh-v2&#xff08;商汤&#xff09;与BGE-M3&#xff08;智源&#xff09;的效果时&#xff0c;需结合…...

《告别试错式开发:TDD的精准质量锻造术》

深度解锁TDD&#xff1a;应用开发的创新密钥 在应用开发的复杂版图中&#xff0c;如何雕琢出高质量、高可靠性的应用&#xff0c;始终是开发者们不懈探索的核心命题。测试驱动开发&#xff08;TDD&#xff09;&#xff0c;作为一种颠覆性的开发理念与方法&#xff0c;正逐渐成…...

哈希函数详解(SHA-2系列、SHA-3系列、SM3国密)案例:构建简单的区块链——密码学基础

文章目录 一、密码哈希函数概述1.1 哈希函数的基本概念1.2 哈希函数在数据安全中的应用 二、SHA-2系列算法详解2.1 SHA-2的起源与发展2.2 SHA-256技术细节与实现2.3 SHA-384和SHA-512的特点2.4 SHA-2系列算法的安全性评估 三、SHA-3系列算法详解3.1 SHA-3的起源与设计理念3.2 K…...

CUDA输出“hello world”

在我们学习任何一门编程语言的时候, 无疑当我们真正用其输出“hello world”的时候, 我们已经成功入门, 接下来要做的就是从入门到放弃了&#x1f606; 接下来我们通过对比C和CUDA来学习CUDA的运行逻辑: C中的hello worldCUDA中的hello world文本编辑器编写源代码, 比如vscod…...

计算机视觉与深度学习 | 视觉里程计算法综述(传统+深度)

视觉里程计算法综述 1. 算法分类与原理1.1 传统几何方法1.2 深度学习方法2. 关键公式与模型2.1 本征矩阵分解2.2 深度学习模型架构3. 代码实现与开源项目3.1 传统方法实现3.2 深度学习方法实现4. 挑战与未来方向总结传统视觉里程计算法综述1. 算法分类与核心原理1.1 特征点法1.…...

c++ 函数参数传递

C 中的值传递和地址传递 在 C 中&#xff0c;函数参数传递主要有两种方式&#xff1a;值传递和地址传递&#xff08;指针传递和引用传递都属于地址传递的变体&#xff09;。 1. 值传递 特点 函数接收的是实参的副本对形参的修改不会影响原始变量适用于小型数据&#xff08;…...

计算机视觉与深度学习 | 什么是图像金字塔?

图像金字塔详解 图像金字塔 图像金字塔详解1. **定义**2. **原理与公式****2.1 高斯金字塔****2.2 拉普拉斯金字塔**3. **代码示例****3.1 使用OpenCV实现****3.2 手动实现高斯模糊与降采样**4. **应用场景**5. **关键点总结**1. 定义 图像金字塔是一种多尺度图像表示方法,将…...

AI超级智能体教程(五)---自定义advisor扩展+结构化json输出

文章目录 1.自定义拦截器1.2自定义Advisor1.2打断点调试过程1.3Re-reading Advisor自定义实现 2.恋爱报告开发--json结构化输出2.1原理介绍2.1代码实现2.3编写测试用例2.4结构化输出效果 1.自定义拦截器 1.2自定义Advisor spring里面的这个默认的是SimpleloggerAdvisor&#…...

ActiveMQ 集群搭建与高可用方案设计(一)

一、引言 在当今分布式系统盛行的时代&#xff0c;消息中间件扮演着至关重要的角色&#xff0c;而 ActiveMQ 作为一款开源的、功能强大的消息中间件&#xff0c;在众多项目中得到了广泛应用。它支持多种消息传输协议&#xff0c;如 JMS、AMQP、MQTT 等 &#xff0c;能够方便地实…...

MySQL数据操作全攻略:DML增删改与DQL高级查询实战指南

知识点4【MySQL的DDL】 DDL&#xff1a;主要管理数据库、表、列等操作。 库→表&#xff08;二维&#xff09;→列&#xff08;一维&#xff09; 数据表的第一行是 列名称 数据库是由一张或多张表组成 我们先学习在数据库中创建数据表 0、常见的数据类型&#xff1a; 1、…...

RabbitMQ 中的六大工作模式介绍与使用

文章目录 简单队列&#xff08;Simple Queue&#xff09;模式配置类定义消费者定义发送消息测试消费 工作队列&#xff08;Work Queues&#xff09;模式配置类定义消费者定义发送消息测试消费负载均衡调优 发布/订阅&#xff08;Publish/Subscribe&#xff09;模式配置类定义消…...

一种基于重建前检测的实孔径雷达实时角超分辨方法——论文阅读

一种基于重建前检测的实孔径雷达实时角超分辨方法 1. 专利的研究目标与实际问题意义2. 专利提出的新方法、模型与公式2.1 重建前检测(DBR)与数据裁剪2.1.1 回波模型与检测准则2.1.2 数据裁剪效果2.2 数据自适应迭代更新2.2.1 代价函数与迭代公式2.2.2 矩阵递归更新2.3 正则化…...

代购平台如何“说本地话,穿本地衣”

当海外消费者点开一个代购商城&#xff0c;看到满屏机械翻译的中式文案&#xff0c;他们大概率会默默关闭页面。还有数据显示&#xff0c;不符合本地审美的页面设计会导致70%的潜在客户流失&#xff0c;而专业的本地化改造能让订单转化率提升3倍以上。 01 AI翻译&#xff1a;让…...

C++调试(叁):编译qBreakpad并使用其生成Dump文件

目录 1.前言 2.生成Dump文件的第三方库 3.第三方库下载链接 4.编译qBreakpad 5.VS中使用qBreakpad 6.qBreakpad测试程序 前言 在第二篇文章中&#xff0c;我主要讲解了如何使用SetUnhandledExceptionFilter函数设置程序的异常回调&#xff0c;在设置的回调函数中调用MiniDumpWr…...

0基础 | STM32 | TB6612电机驱动使用

TB6612介绍及使用 单片机通过驱动板连接至电机 原因&#xff1a;单品机I/O口输出电流I小 驱动板&#xff1a;从外部引入高电压&#xff0c;控制电机驱动 电源部分 VM&#xff1a;电机驱动电源输入&#xff0c;输入电压范围建议为3.7&#xff5e;12V GND&#xff1a;逻辑电…...

Cycleresearcher:通过自动化评审改进自动化研究

1、引言 迄今为止&#xff0c;整个科学发现过程自动化的挑战在很大程度上仍未解决&#xff0c;特别是在生成和改进符合同行评审工作高标准的研究成果方面。此外&#xff0c;很少有工作涉及迭代反馈的整合&#xff0c;这对保持学术的健全性和新奇至关重要。当前的模型往往难以适…...

深入理解Redis SDS:高性能字符串的终极设计指南

&#x1f4cd; 文章提示 10分钟掌握Redis核心字符串设计 | 从底层结构到源码实现&#xff0c;揭秘SDS如何解决C字符串七大缺陷&#xff0c;通过20手绘图示与可运行的C代码案例&#xff0c;助你彻底理解二进制安全、自动扩容等核心机制&#xff0c;文末附实战优化技巧&#xff…...

【tcp连接windows redis】

tcp连接windows redis 修改redis.conf 修改redis.conf bind * -::*表示禁用保护模式&#xff0c;允许外部网络连接 protected-mode no...

【AI平台】n8n入门6:调用MCP服务(非社区节点)

前言 前边用n8n搭建一个MCP服务&#xff0c;现在&#xff0c;用n8n调用其他服务商提供的MCP服务。本文以高德地图服务为例&#xff0c;记录一下操作过程。 实现案例功能 MCP是啥 MCP&#xff08;Model Context Protocol&#xff0c;模型上下文协议&#xff09;是由Anthropi…...

C++负载均衡远程调用学习之 Dns-Route关系构建

目录 1.LARS-DNS-MYSQL环境搭建 2.LARSDNS-系统整体模块的简单说明 3.Lars-Dns-功能说明 4.Lars-Dns-数据表的创建 5.Lars-Dns-整体功能说明 6.Lars-DnsV0.1-Route类的单例实现 7.Lars-DnsV0.1-Route类的链接数据库方法实现 8.Lars-DnsV0.1-定义存放RouteData关系的map数…...

Linux53 百度网盘运行(下载devtoolset11后仍提示stdc++3.0.29缺失 计划用docker容器隔离运行,计划后续再看)

算了 放弃 都用到docker了 计划先看看系统服务后续再研究吧 百度网盘运行(下载devtoolset11后仍提示stdc3.0.29缺失 计划用docker容器隔离运行 但是由于系统服务未扎实&#xff0c;计划后续再看 重新下了el7的版本 刚才已启动成功 单输入xlock不启动 切换用户也不启动 …...

ASP.NET MVC​ 入门与提高指南八

45. 神经形态计算与 MVC 应用性能革新 45.1 神经形态计算概念 神经形态计算是借鉴生物神经系统的结构和工作原理来设计计算系统。它模仿人脑神经元和突触的工作方式&#xff0c;具备低功耗、高并行性和自适应学习等特性&#xff0c;能在处理复杂感知和认知任务时展现出卓越的…...

Python刷题:流程控制(下)

今天刷的是PythonTip的Python 入门挑战中的题&#xff0c;整体难度不高&#xff0c;适合小白练手以及巩固知识点。下面会进行详细讲解。 每日一句 在无人问津的角落里&#xff0c; 默默努力的人独自发光&#xff0c; 孤独是他们奋斗路上的常客&#xff0c; 却也是成就他们的…...