首页
时间胶囊
壁纸
留言
统计
友链
Search
1
linux大作业(DHCP部署)
179 阅读
2
图
88 阅读
3
Python中os.mkdir()与os.makedirs()的区别及用法
82 阅读
4
英语插本笔记
70 阅读
5
C语言笔记
70 阅读
默认分类
网站搭建
学习笔记
Python
Django
opencv
机器学习
英语插本
数据结构插本笔记
物联网学习
mricropython
登录
Search
yao
累计撰写
25
篇文章
累计收到
15
条评论
首页
栏目
默认分类
网站搭建
学习笔记
Python
Django
opencv
机器学习
英语插本
数据结构插本笔记
物联网学习
mricropython
页面
时间胶囊
壁纸
留言
统计
友链
搜索到
25
篇与
的结果
2024-06-26
MYSQL学习
对于不同条件下计数在MySQL中,要实现不同条件的计数,可以使用CASE语句结合聚合函数COUNT。以下是一个示例,假设有一个名为orders的表,其中包含status字段,表示订单的状态,如'completed', 'cancelled', 或 'pending'。要计算每种状态的订单数量,可以使用以下SQL查询:SELECT COUNT(CASE WHEN status = 'completed' THEN 1 END) AS completed_count, COUNT(CASE WHEN status = 'cancelled' THEN 1 END) AS cancelled_count, COUNT(CASE WHEN status = 'pending' THEN 1 END) AS pending_count FROM orders;自连接查询左表和右表是同一个表,根据连接查询条件查询两个表中的数据。自连接查询的用法:select c.id, c.title, c.pid, p.title from areas as c inner join areas as p on c.pid = p.id where p.title = '山西省';说明:自连接查询必须对表起别名多表查询在MySQL中,多表查询通常指的是JOIN操作,用于结合两个或多个表中的相关列。JOIN类型主要有:INNER JOIN(内连接)、LEFT JOIN(左连接)、RIGHT JOIN(右连接)和FULL OUTER JOIN(全外连接)。
2024年06月26日
23 阅读
0 评论
0 点赞
2024-03-18
自制拓竹AMS笔记
mqtt连接拓竹打印机 通过mqtt连接拓竹3D打印机进行信息交互。监听拓竹换料信号,从而去控制YEC-AMS进行自动换料。连接参数:用户名:默认bblp密码:局域网模式里面的密码订阅地址:device/序列号/report发送地址:device/序列号/request端口:默认为8883地址:为局域网模式内的ip地址SSL/TLS:开启mricropython mqtt 代码from umqtt.simple import MQTTClient from machine import Pin import network import time import ujson from bambu.bambu_commands import banbu_start,START_PUSH class Bambu_mqtt_cliet: def __init__(self,mqtt_server,DEVICE_SERIAL,password,username="bblp",client_id="esp32",mqtt_port=8883): self.mqtt_server = mqtt_server # 服务器地址 self.DEVICE_SERIAL = DEVICE_SERIAL # 服务器序列好 self.username = username # 用户 self.password = password # 服务器密码 self.client_id = client_id self.mqtt_port = mqtt_port # 订阅和发送的主题 self.TOPIC_SUBSCRIBE = "device/" + DEVICE_SERIAL + "/report" self.TOPIC_PUBLISH = "device/" + DEVICE_SERIAL + "/request" self.new_message = {} # 订阅的消息 self.client = None def sub_cb(self,topic,msg): self.new_message = ujson.loads(msg).get("print",{}) # 连接和订阅 def conent_and_subscribe(self): try: self.client = MQTTClient(self.client_id, self.mqtt_server, user=self.username, password=self.password, ssl=True) self.client.set_callback(self.sub_cb) self.client.connect() self.client.subscribe(self.TOPIC_SUBSCRIBE) print("成功连接到 %s, 订阅地址为 %s topic" % (self.mqtt_server, self.TOPIC_SUBSCRIBE)) except Exception as e: print("连接失败",str(e)) def loop_updata(self): while True: time.sleep(1) self.client.check_msg() try: self.piblish(START_PUSH) except Exception as e: self.new_message = {} time.sleep(10) self.conent_and_subscribe() print("发布出错了",e) print("结束") def piblish(self,operation_code): self.client.publish(self.TOPIC_PUBLISH, operation_code, retain=True) mircropython 驱动tt电机 DRV8833 具有两个 NMOS H 桥驱动器,使其能够控制两个直流有刷电机、一个双极步进电机、螺线管和其他电感负载。 它的工作电压范围为 2.7 V 至 10.8 V,每个通道可连续提供高达 1.2 A 的电流。此外,它还可以承受每通道高达 2 A 的峰值电流几秒钟。 DRV8833 还包含多种保护功能,例如欠压锁定、过流和过热保护,提供高水平的可靠性。这些事件中的每一个都会禁用 H 桥 MOSFET。故障情况消除后,设备将恢复运行。 它还包括低功耗睡眠模式,可让您节省电量,尤其是在电机不使用时。 所有这些功能使其成为为小型低压电机供电的绝佳选择。驱动旋转:两个引脚的高低电平设置旋转方向和驱动旋转旋转速度:通常为高电平的引脚上使用脉宽调制输入1/输入3输入2/输入4旋转方向低(0)低(0)电机关闭高(1)低(0)向前低(0)高(1)向后高(1)高(1)电机关闭当前进展:电路升级为8通,pcb绘制等待中,注意微动开关要与引脚直接连接。参考地址DRV8833使用说明
2024年03月18日
55 阅读
0 评论
1 点赞
2024-02-18
C语言笔记
函数说明gets(字符数组):从终端输入一个字符串到字符数组。scanf():从终端输入多个值给变量。如scanf("%s %s",a,b)时间复杂度排序$O(1) < O(\log n) < O(n) < O(n \log n) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)$散列表的考虑因素散列表的长度关键字的数量关键字的分布情况计算散列函数所需的时间记录的查找频率广义表 : L = ((a,b,c),d)深度: 表展开后所含括号的层数,2长度: 表中所含的数据元素个数,2进制间的转换二进制转十进制:树树的度:树内个结点都度的最大值。
2024年02月18日
70 阅读
0 评论
4 点赞
2024-01-16
图
定义图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(VE),其中,G 表示一个图,V 是图G中顶点的集合,E是图G中边的集合。无向图 无向边:若顶点到之间的边没有方向,则称这条边为无向边 (Edge),用无序偶对 (viv) 来表示。如果图中任意两个顶点之间的边都是无向边,则称该图为无向图(Undirected graphs)。图7-2-2就是一个无向图,由于是无方向的,连接顶点A与D的边,可以表示成无序对 (A,D),也可以写成(D,A)。{callout color="#f0ad4e"}在无向图中,如果任意两个顶点之间都存在边,则称该图为无向完全图。含有 n个顶点的无向完全图有$n*(n-1)/2 $条边。{/callout}有向图 有向边:若从顶点 到v的边有方向,则称这条边为有向边,也称为弧(Arc)。用有序偶来表示,称为弧尾(Tail),称为弧头(Head)。如果图中任意两个顶点之间的边都是有向边,则称该图为有向图 (Directed graphs)。图 7-2-3就是一个有向图。连接顶点A到D的有向边就是弧,A 是尾,D 是弧头,<A,D>表示弧注意不能写成<D,A>。{callout color="#f0ad4e"}在有向图中,如果任意两个顶点之间都存在方向互为相反的两条弧,则称该图为有向完全图。含有n个顶点的有向完全图有$n*(n-1) $条边。{/callout}{alert type="error"}无向边用小括号“()”表示,而有向边则是用尖括号“<>””表示。{/alert}总结 图按照有无方向分为无向图和有向图。无向图由顶点和边构成,有向图由顶点和弧构成。弧有弧尾和弧头之分。 图按照边或弧的多少分稀疏图和稠密图。如果任意两个顶点之间都存在边叫完全图,有向的叫有向完全图。若无重复的边或顶点到自身的边则叫简单图。 图中顶点之间有邻接点、依附的概念。无向图顶点的边数叫做度,有向图顶点分为入度和出度。 图上的边或弧上带权则称为网。 图中顶点间存在路径,两顶点存在路径则说明是连通的,如果路径最终回到起始点则称为环,当中不重复叫简单路径。若任意两顶点都是连通的,则图就是连通图有向则称强连通图。图中有子图,若子图极大连通则就是连通分量,有向的则称强连通分量。 无向图中连通且 n 个顶点 n-1 条边叫生成树。有向图中一顶点入度为0其余顶点入度为1的叫有向树。一个有向图由若干棵有向树构成生成森林图的存储结构邻接矩阵网(带有权重的图)邻接表十字链表邻接多重表边集数组图的遍历深度优先遍历广度优先遍历{callout color="#f0ad4e"}入队列是出队列的结点的连接节点除去已经出队列的节点{/callout}最小生成树普里姆(prim)算法克鲁斯卡尔(kruskal)算法最短路径迪杰斯特拉(dijkstra)算法弗洛伊德(Floyd)算法拓扑排序
2024年01月16日
88 阅读
1 评论
1 点赞
2024-01-15
数据结构笔记
树二叉书满二叉树,完全二叉树森林多个树组成的哈夫曼树 一般地,设需要编码的字符集为{ du,dz,…,dn },各个字符在电文中出现的次数或频率集合为{wi,wz,…,wn},以di,dz,…,dn作为叶子结点,以wi,w2,…,wn作为相应叶子结点的权值来构造一棵赫夫曼树。规定赫夫曼树的左分支代表0,右分支代表1,则从根结点到叶子结点所经过的路径分支组成的0和1的序列便为该结点对应字符的编码,这就是赫夫曼编码。图
2024年01月15日
25 阅读
0 评论
1 点赞
2024-01-10
英语插本笔记
语法结构 句子的最基本结构是主谓结构,必须有主语和谓语主谓宾主语-谁发出的动作谓语-发出的动作宾语-谁接受动作主谓双宾I gave you duck neck.两个宾语-间件宾语(最先接受动作的)+直接宾语主谓宾宾补结构They call me duck neck.宾语补足语:为宾语补充说明主系表结构I am a mouse/rat(rat:大的老鼠,mouse:小的老鼠)谓语由系动词充当系动词-be动词(am are is),感官动词,保持类(keep/stat),变化类(become)非谓语一句话只能有一个动词充当谓语,剩下的所有的不作谓语的动词都要变成非谓语
2024年01月10日
70 阅读
0 评论
2 点赞
2023-11-29
frp内网穿透服务器部署(linux服务端,windons客户端)教程
介绍 在当下ipv4资源紧张下,许多的家庭办理的宽带都不带赠送公网ip,这让我们的不能在外网访问我们家的电脑。我们可以通过内外穿透进行外围远程桌面,远程联机,搭建nas,博客等...frp 是什么?frp 是一款高性能的反向代理应用,专注于内网穿透。它支持多种协议,包括 TCP、UDP、HTTP、HTTPS 等,并且具备 P2P 通信功能。使用 frp,您可以安全、便捷地将内网服务暴露到公网,通过拥有公网 IP 的节点进行中转。为什么选择 frp?通过在具有公网 IP 的节点上部署 frp 服务端,您可以轻松地将内网服务穿透到公网,并享受以下专业特性:多种协议支持:客户端服务端通信支持 TCP、QUIC、KCP 和 Websocket 等多种协议。TCP 连接流式复用:在单个连接上承载多个请求,减少连接建立时间,降低请求延迟。代理组间的负载均衡。端口复用:多个服务可以通过同一个服务端端口暴露。P2P 通信:流量不必经过服务器中转,充分利用带宽资源。客户端插件:提供多个原生支持的客户端插件,如静态文件查看、HTTPS/HTTP 协议转换、HTTP、SOCKS5 代理等,以便满足各种需求。服务端插件系统:高度可扩展的服务端插件系统,便于根据自身需求进行功能扩展。用户友好的 UI 页面:提供服务端和客户端的用户界面,使配置和监控变得更加方便。搭建所需要的配置一个公网的服务器linux系统:作为我们的服务端,可以在阿里云上购买,现在阿里云新年大促,一年2核2g服务器只需要87起,学生0元起 点击进行购买windos电脑:作为我们的客户端部署文件下载在官网上选择适合自己的系统文件进行下载官网下载地址frps:部署在服务端的文件:这里选择linux64位的 点击进行下载frpc:部署在客户端的文件:这是选择window64位版本点击下载服务端(frps)搭建# 下载文件 wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz # 解压文件 tar -zxvf frp_0.52.3_linux_amd64.tar.gz # 进入解压目录 cd frp_0.52.3_linux_amd64 # 给frps文件权限 chomd 777 frps # 编辑配置文件 vi frps.toml编辑内容如下{card-default label="frps.toml" width=""}bindAddr = "0.0.0.0" bindPort = 7000 # 内网穿透端口 # 用户认证 auth.method = "token" #{可选}身份验证方式 auth.token = "123456" #token设置密码,用于通过身份验证创建连接 # 后台管理 webServer.addr = "0.0.0.0" webServer.port = 7500 # frps管理后台端口 webServer.user = "admin" # 登录名 webServer.password = "admin123" # 登录密码 {/card-default}编辑完成后保存,在当前目录下运行./frps -c ./frps.toml进行测试是否运行成功,在浏览器打卡你的公网ip地址:7500,如果管理后台访问成功就代表内外穿透成功了,如下这个页面:{message type="warning" content="注意:一定要在服务器上防火墙上放行设置的端口,如这里是7000和7500"/}配置systemd,让frps后台启动和开机自启# 安装systemd yum install systemd # 创建和编辑配置文件 $ sudo vim /etc/systemd/system/frps.service编辑文件内容如下:唯一需要修改的就是您的frps的安装路径,即刚刚下载的位置路径{card-default label="frps.service" width=""}[Unit] # 服务名称,可自定义 Description = frp server After = network.target syslog.target Wants = network.target [Service] Type = simple # 启动frps的命令,需修改为您的frps的安装路径 ExecStart = /path/to/frps -c /path/to/frps.toml [Install] WantedBy = multi-user.target {/card-default}使用 systemd 命令管理 frps 服务# 启动frp sudo systemctl start frps # 设置开机自启 sudo systemctl enable frps 其他systemd管理命令# 停止frp sudo systemctl stop frps # 重启frp sudo systemctl restart frps # 查看frp状态 sudo systemctl status frps自此,服务端就搭建完成了客户端(frpc)搭建 客户端搭建就比较容易,在下载frpc后进行解压,进入解压后的目录里面,编辑frpc.toml文件,内容如下:{card-default label="frpc.toml" width=""}serverAddr = "你的公网ip地址" serverPort = 7000 # 内网穿透端口 auth.token = "123456" # 服务端设置的token密码 [[proxies]] name = "app_name1" # 应用名,自定义 type = "tcp" # 连接方式:有http,https,UDP等 localIP = "127.0.0.1" # 本地连接地址 localPort = 8000 # 本地端口 remotePort = 8000 # 自定义的远程服务器端口 [[proxies]] name = "app_name2" type = "tcp" localIP = "127.0.0.1" localPort = 8080 remotePort = 8080 {/card-default}创建完成后保存,在这个文件的目录下打开终端,输入这个命令./frpc.exe -c ./frpc.toml运行,自此我们就可以在随时随地的访问我们本地电脑搭建的服务了{message type="warning" content="注意:一定要在服务器上防火墙上放行设置的端口,如这里是8000和8080"/}{anote icon="fa-download" href="https://gofrp.org/zh-cn/docs/" type="secondary" content="官网文档"/}
2023年11月29日
31 阅读
0 评论
0 点赞
2023-08-19
在linux上Nginx+Gunicorn+Supervisor部署django
# 介绍GunicornGunicorn 是一个 Python 的 WSGI HTTP 服务器。它所在的位置通常是在反向代理(如 Nginx)或者 负载均衡(如 AWS ELB)和一个 web 应用(比如 Django 或者 Flask)之间。它是一个移植自Ruby的Unicorn项目的pre-fork worker模型,即支持eventlet也支持greenlet。 如果对Flask框架还有不清楚的地方,可以查看本文一分钟学会Flask框架的安装与快速使用 Gunicorn启动项目之后一定会有一个主进程Master和一个或者多个工作进程。工作进程的数量可以指定。工作进程是实际处理请求的进程。主进程是维护服务器的运行。nginxNginx是一个高性能的HTTP和反向代理web服务器,所谓的方向代理即使将访问用户a地址,nginx将a地址指向了b地址,即使用户通过a地址访问b地址。supervisorSupervisor(Supervisor: A Process Control System)是用Python开发的一个client/server服务,,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。我们在shells上运行gunicorn时候或者其他,只要我们一退出shell,这个进程就会杀死。所以需要这个框架来守护我们运行的gunicorn.保证网站系统不被关闭。前期准备在搭建前我们需要准备项目所要的环境,首先在开始这前我们需要创建新的用户来搭建环境,因为使用root不安全,一般不使用root.# 添加用户 adduser 新用户名 # 为创建的新用户设置密码 passwd 新用户名 # 将新用户添加超级权限组 usermod -aG wheel 新用户名 # 切换新用户 su 新用户名 # 安装wget便于下载软件 sudo yum install -y wget在创建密码的时候输入密码不显示,将用户添加到wheel用户组下,wheel用户组为管理组,python环境搭建首先下载python包到我们新用户目录下的src文件下,这个目录需要我们先创建# 创建/home/新用户名/src目录 mkdir ~/src # 进入目录 cd ~/src # 下载python文件 wget https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tgz #安装可能需要的依赖 sudo yum install -y openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel # 解压文件且进入目录 tar -zxvf Python-3.6.9.tgz cd Python-3.6.9 # 编辑配置文件--prefix是python的安装目录 ./configure --prefix=/usr/local/python3 make make install # 建立软连接,(Python与pip都建立软连接,分别为python3、pip3与系统自带的Python2区分)可以使用命令`ls -l /usr/bin/查看软连接是否已创建成功` ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3 ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3 # 配置环境变量,打开配置文件,添加配置 vi ~/.bash_profile #添加以下配置信息(第一个是python安装路径) export PYTHON_HOME=/usr/local/python3 export PATH=$PYTHON_HOME/bin:$PATH #最后执行以下命令使配置生效 source ~/.bash_profile #可以使用以下命令查看配置是否成功,输出python安装路径即是成功 echo $PYTHON_HOME配置SFTP在将本地项目部署到云服务器的时候,我们需要将文件项目进行上传到云服务器,这里我选择简单的上传方式,采用软件FileZilla Client进行上传,也可以使用xFTP软件。以FileZilla Client这个软件为例,新建站点且配置参数协议选择sftp或者ftp主机为服务器地址,端口默认为sftp:22,ftp:21登录类型可以选择密码或者密钥文件用户为服务器用户名配置完成连接成功后可以直接将项目拉到服务器这里将项目拉到用户apps目录下,需要我们自己创建mkdir -p ~/apps创建虚拟环境但我们将项目上传的服务器部署是,我们需要配置虚拟环境,因为一个服务器不止一个项目,以免环境冲突。# 进入项目目录 cd ~/apps/djangoproject/ # 安装虚拟配置工具 pip3 install virtualenv # 创建虚拟环境,venv为虚拟环境名,在这下会创建同名的目录 virtualenv venv # 激活虚拟环境 source venv/bin/activate使用 Gunicorn进行生产环境的服务部署进入项目根目录下安装Gunicorn,这个安装在虚拟环境下的pipenv install gunicorn # 通过gunicorn运行django,这个可以不运行,因为我们推出shell后这杀死这个进程了 gunicorn blogproject.wsgi -w 2 -k gthread -b 127.0.0.1:8000启动 Nginx 服务器进行服务代理# 安装Nginx sudo yum install epel-release -y sudo yum install nginx -y # 启动Nginx服务: sudo systemctl start nginx{alert type="warning"}可能遇到的问题nginx启动成功后输入ip,无法访问默认的主页(80端口)。原因:云服务器未对外开启80端口{/alert}配置nginx的服务信息位于 /etc/nginx/nginx.conf 的nginx.conf文件是nginx服务器的配置信息,包括 Nginx 进程运行时的用户和组(分别为第一个和第二个参数)以及代理的虚拟服务的配置情况等。/etc/nginx/nginx.conf # 进程运行的用户和组,这里粗暴地设为root用户和组 user root root; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; ...... http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; # Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. # 其他服务器的配置文件的存放地址 include /etc/nginx/conf.d/*.conf; # 一个默认的服务器配置 server { listen 80 default_server; # 监听的端口 listen [::]:80 default_server; server_name _; # 服务域名/ip root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { # 访问路径 } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } ...... 配置 项目代理服务信息# 进入/etc/nginx/conf.d目录 cd /etc/nginx/conf.d # 新建myBlog.conf配置文件 vim myBlog.conf配置信息如下:server { charset utf-8; listen 80; server_name 139.196.xxx.xx; location /static { alias /home/wwb/apps/myDjango/blogproject/static; } location / { proxy_set_header Host $host; proxy_pass http://127.0.0.1:8000; } } {message type="success" content="监听80端口(访问ip时的默认端口),server_name为公网ip或域名,访问静态文件路径static_url时,nginx自动到static_root指定的路径下获取文件。访问其他路径时,将请求转发给本机的8000端口,那里运行的是Gunicorn 服务中的 django程序。"/}#重启nginx让配置生效 sudo systemctl restart nginx 使用Supervisor守护Gunicorn 进程当前的Gunicorn服务是我们手工启动的,一旦我们退出 shell,服务器就关闭了,博客无法访问。就算在后台启动 Gunicorn,万一哪天服务器崩溃重启了又得重新登录服务器去启动,非常麻烦。为此使用 Supervisor 来管理 Gunicorn 进程,这样当服务器重新启动或者 Gunicorn 进程意外崩溃后,Supervisor 会帮我们自动重启 Gunicorn。# 安装supervisor pip3 instal supervisor # 在用户目录下创建相关文件目录 cd ~/etc mkdir supervisor cd supervisor mkdir var mkdir log mkdir conf.d # 在~/etc目录下生成Supervisor的配置文件 echo_supervisord_conf > supervisord.conf{card-default label="目录说明" width=""}supervisor目录手动创建,其中var 目录下用于存放一些经常变动的文件,例如 socket 文件,pid 文件,log 下则存放日志文件。{/card-default}可将supervisord.conf文件内容全部替换为以下内容# [unix_http_server] 版块,设置file的值。 # 即让 socket 文件生成在 ~/etc/supervisor/var/ 目录下。注意 supervisor 不支持将 ~ 展开为用户 home 目录,所以要用绝对路径指定。 [unix_http_server] file=/home/新用户名/etc/supervisor/var/supervisor.sock ; the path to the socket file # [supervisord] 板块下的 logfile 和 pidfile 文件的路径,还有 user 改为系统用户,这样 supervisor 启动的进程将以系统用户运行,避免可能的权限问题: [supervisord] logfile=/home/新用户名/etc/supervisor/log/supervisord.log ; main log file; default $CWD/supervisord.log pidfile=/home/新用户名/etc/supervisor/var/supervisord.pid ; supervisord pidfile; default supervisord.pid user=root ; setuid to this UNIX account at startup; recommended if root # [supervisorctl] 板块,配置serverurl的值 [supervisorctl] serverurl=unix:////home/新用户名/etc/supervisor/var/supervisor.sock ; use a unix:// URL for a unix socket # [include] 版块,将 /home/wwb/etc/supervisor/conf.d/ 目录下所有以 .ini 结尾的文件内容包含到配置中来,这样便于配置的模块化管理,和之前 Nginx 配置文件的处理方式是类似的。注意取消行首的`;`注释。 [include] files = /home/新用户名/etc/supervisor/conf.d/*.ini autorestart=True配置项目应用到supervisor# 进入我们上面设置配置文件路径 /home/新用户名/etc/supervisor/conf.d su 新用户 cd ~/etc/supervisor/conf.d # 新建项目配置文件blog.ini vim blog.ini ############################################################## # blog.ini配置详情 # 程序名,后续开启关闭进程都使用程序名指代当前应用 [program:myDj] # 程序需要执行的指令 command=gunicorn blogproject.wsgi -w 2 -k gthread -b 127.0.0.1:8000 # 执行指令时到达的路径 directory=/home/新用户名/apps/djangoproject/ # 是否自动启动,遭遇意外自动重启 autostart=true autorestart=unexpected # 开启当前应用的用户角色 user=root # 应用的相关日志 stdout_logfile=/home/新用户名/etc/supervisor/log/myDjango-stdout.log stderr_logfile=/home/新用户名/etc/supervisor/log/myDjango-stderr.log ################################################################## # -c 指定 Supervisr 启动时的配置文件。 supervisord -c ~/etc/supervisord.conf #进入 supervisorctl 进程管理控制台 supervisorctl -c ~/etc/supervisord.conf #更新配置文件 update #启动应用 restart myDj配置数据库{callout color="#4dcfef"}参考文章: Django学习之旅(十二)Nginx+Gunicorn+Supervisor部署Django博客应用以及各种排坑尝试Linux系统上安装python详细步骤【Python】Python创建虚拟环境的三种方式{/callout}
2023年08月19日
41 阅读
0 评论
1 点赞
2023-05-16
chanel websocket笔记
简介WebSocket 是一种网络传输协议,可在单个 TCP 连接上进行全双工通信,位于 OSI 模型的应用层。WebSocket 协议在 2011 年由 IETF 标准化为 RFC 6455,后由 RFC 7936 补充规范。WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输。channelschannels是python进行socket的框架,使用redis.{alert type="warning"}需要安装包:channels,channles_redis{/alert}启动教程{timeline}{timeline-item color="#19be6b"}1.启动django项目,在setings.py中注册INSTALLED_APP中添加注册channels{/timeline-item}{timeline-item color="#ed4014"}2.在settingsz同级目录下创建`routing.py文件在里面定义通信通道,如以下内容 #routing.py中的内容{/timeline-item}{timeline-item color="skyblue"}3.修改项目的通信方式:默认为wsgi,而我们是asqi,在settings.py文件中添加如下内容ASGI_APPLICTION = "项目名.routing.application"{/timeline-item}{/timeline}
2023年05月16日
35 阅读
0 评论
1 点赞
2023-04-12
Django-restframework笔记
Django-restframework介绍 Django-restframewor是django的一个组件。用于api开发,方便前后端开发。接口实现规范采用:restful。还有一种规范是RPC.{card-describe color="red" title="请求方式"}POST :一般用于添加信息GET: 用于查询信息DELETE: 用于删除数据PUT: 修改一个字段的所有数据PATCH: 修改部分信息{/card-describe}RETSFULG规范 RESTful是一种专门为Web开发而定义API接口的设计风格,尤其适用前后端分离的应用模式中。 这种风格的理念认为前后端开发任务就是提供数据的对外提供的是数据资源的访问接口,所以在定义接口时,客户端访问的url路径就是这种要操作的数据资源。 而对于数据资源分别适用POST,GET,DELETE,UPDATE等请求动作来表达对数据的增删改查。restflu是通用的规范。不限制任何语言和开发框架的使用。{lamp/}django的CBV在django中用视图函数叫FBV,用类函数的叫CBV,类函数可以让代码看起来更加简洁。用起来也非常方便。一般用于对一个资源多种操作 views.py文件。# 类函数里面的名字是不能改的,是请求的名字 from django.views import View class Bookview(View): def get(self,request) return HttpResponse("get请求book") def post(self,request) return HttpResponse("post请求book") 进行post请求的时候,需要关闭防跨域请求中间件。urls.py文件中 urlpatterns = [ path("book/",views.Bookview.as_view()) ] {callout color="#09bfec"}当你发送的其他请求而返回get请求的时候,可能是你的地址写错了,少了一个/{/callout}
2023年04月12日
23 阅读
0 评论
2 点赞
1
2
3