django 接收 post 请求中的 json 数据
环境信息
- Python3.10
- Django 4.0
接收 post 中的 json 数据
示例通过 curl
命令模拟 post 请求,命令如下:
curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST \ |
Django 处理程序示例:
from django.http import HttpResponse |
Console 输出结果:
****** POST body: b'{"id" : "yTP7PSsRxz53tJ56VVG", "type" : 5}', type : <class 'bytes'> |
以上输出可以看到,request.body
中的类型为 bytes
使用 eval
转换后类型变为 dict
使用 json.loads
将 request.body
转换为 dict
时,可能会报以下错误:
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1) |
可能原因 参考
rsyncd 服务
命令格式
rsync [OPTION]... SRC DEST |
:
ssh 方式进行备份,ssh 非默认端口使用选项 -e
指定端口, -e 'ssh -p 30000'
::
socket 方式进行备份,rsync
以服务方式监听,SRC/DEST
为配置中定义的模块 []
rsync
命令使用中,如果源参数的末尾有斜线,只会复制指定目录的内容,而不复制目录本身,没有斜线,则会复制目录本身,包括目录- 客户端免密登录时,需要在客户端建立密码文件:
/etc/rsync.passwd
,文件中只保存密码,权限为600,用选项--password-file
指明存放密码的文件位置
docker compose 命令
对于 Compose
来说,大部分命令的对象既可以是项目本身,也可以指定为项目中的服务或者容器。如果没有特别的说明,命令对象将是项目,这意味着项目中所有的服务都会受到命令影响。
执行 docker compose [COMMAND] --help
可以查看具体某个命令的使用格式。
docker compose
命令的基本的使用格式是
docker compose [-f=<arg>...] [options] [COMMAND] [ARGS...] |
常用选项
-f, --file FILE
指定使用的 Compose 模板文件,默认为docker-compose.yml
,可以多次指定。-p, --project-name NAME
指定项目名称,默认将使用所在目录名称作为项目名。
linux fail2ban 详解
环境信息
- Centos 7
- iptables
Fail2ban 是 Linux 上的一个著名的入侵保护的开源框架。它通过监视相应服务的日志记录文件,匹配日志记录中的错误信息(正则式匹配),然后与系统的 iptables
联动执行相应的屏蔽动作(一般情况下是调用防火墙屏蔽),比如:当有人在试探你的 HTTP
、SSH
、SMTP
、FTP
密码,只要达到你预设的次数,Fail2ban
就会调用防火墙屏蔽这个 IP,并且可以发送 e-mail 通知系统管理员。
由于 Fail2ban
需要与系统的 iptables
、firewalld
等联动来达到封禁 IP 的目的, iptables
使用与 firewalld
有少许不同。
本文以 iptables
为例
安装
yum install epel-release |
Confluence 常用基本操作
windows 中的 zip 类型压缩文件,linux 中 unzip 解压后文件名乱码
linux rsyslog 服务
linux find 命令
环境信息
- Centos 7
常用选项
命令格式:
find path -option [ -print ] [ -exec -ok command ] {} \; |
常用查找选项(-option
):
选项 | 说明 | 示例 |
---|---|---|
-amin n -amin +n -amin -n |
在过去 n 分钟内被读取过 更改时间超过 n 更改时间在 n 以内 |
|
-anewer file |
比文件 file 更晚被读取过的文件 | |
-atime n |
在过去 n 天内被读取过的文件 | |
-cmin n |
在过去 n 分钟内被修改过 | |
-cnewer file |
比文件 file 更新的文件 | |
-ctime n |
在过去 n 天内创建的文件 | |
-mtime n |
在过去 n 天内修改过的文件 | |
-empty |
空的文件 | |
-gid n -group name |
gid 是 n group 名称是 name |
|
-user u |
根据用户名查找 | |
-nouser |
属主不存在 | |
-ipath p -path p |
路径名称符合 p 的文件,ipath 会忽略大小写 | |
-name name -iname name |
文件名称符合 name 的文件。iname 会忽略大小写 | |
-size n -size +n -size -n |
文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。 文件大小大于 n 文件大小小于 n |
|
-type c |
文件类型是 c 的文件,c 包括: d : 目录 c : 字符设备 b : 块设备 p : 通道设备 f : 文件 l : 链接文件 s : socker |
|
-pid n |
process id 是 n 的文件 | |
-perm 0644 |
权限 | |
-maxdepth -mindepth |
查找深度 |
django 定时任务
linux tcp_wrappers 详解
环境信息
- Centos 7
TCP_wrappers
主要是工作在应用层的一个安全工具,使用访问控制列表(ACL
)来防止主机名和主机地址的欺骗,用于过滤对 类 Unix
系统的网络访问。
在一个安全的系统中,Linux
自身具有两层安全的防火墙。第一层是通过 IP/Port 过滤机制的 iptables
来实现,第二层,也就是 TCP_wrappers
了,它主要是通过对系统中的某些服务进行开放与关闭,允许和禁止来有效保证系统安全运行。
可以简单理解为 Linux
系统访问控制的流程:
Client -> iptables -> TCP_wrappers -> Server 的访问控制
- iptables :基于源 IP/端口、目的 IP/端口进行访问控制
- TCP_wrappers:基于服务自身运行情况进行访问控制
- Server:基于服务器本身行为包括文件、目录等权限进行访问控制
django logging 模块
环境信息
- python 3.10
- django 4.0
Python logging 模块说明
Django
使用 Python
内置的 logging
模块处理系统日志,一份 Python logging
配置由下面四个部分组成:
- Loggers
- Handlers
- Filters
- Formatters
Loggers
logger
是日志系统的入口。每个 logger
都是命名了的 bucket
, 消息写入 bucket
以便进一步处理logger
可以配置 日志级别
。日志级别描述了由该 logger
处理的消息的严重性。Python
定义了下面几种日志级别:
DEBUG
:排查故障时使用的低级别系统信息INFO
:一般的系统信息WARNING
:描述系统发生了一些小问题的信息ERROR
:描述系统发生了大问题的信息CRITICAL
:描述系统发生严重问题的信息
每一条写入 logger
的消息都是一条 日志记录
。每一条日志记录也包含 日志级别
,代表对应消息的严重程度。日志记录还包含有用的元数据,来描述被记录了日志的事件细节,例如堆栈跟踪或者错误码。
当 logger
处理一条消息时,会将自己的 日志级别
和这条消息的 日志级别
做对比。如果消息的日志级别匹配或者高于 logger
的日志级别,它就会被进一步处理。否则这条消息就会被忽略掉。
当 logger
确定了一条消息需要处理之后,会把它传给 Handler
。
python 虚拟环境
环境信息
- Python 3.10
虚拟环境创建步骤
假定项目名为 project01
, 目录名为 project01
mkdir project01 |
以上命令会在目录 project01
中创建虚拟环境,查看当前目录,会产生以下目录和文件
$ ls |
观察 bin
目录的内容,里面有 python3
、pip3
等可执行文件,实际上是链接到 Python
系统目录的软链接。
$ ls -l bin/ |
Linux
环境使用以下命令激活虚拟环境
$ source bin/activate |
命令提示符变了,有个 (project01)
前缀,表示当前环境是一个名为 project01
的 Python 环境。
在此虚拟环境中安装包,都会被安装到 (project01)
环境下,具体目录为 project01/lib/python3.10/site-packages/
,系统 Python 环境不受任何影响,也就是说,project01
这个环境是专门针对 project01
应用(项目)创建的,和系统 python 环境或其他应用互不影响。
要退出当前虚拟环境,可以执行以下命令
deactivate |
退出虚拟环境后,再执行如 pip3 install
命令安装的包,会安装到系统 Python 环境。
完全可以针对每个应用创建独立的Python运行环境,这样就可以对每个应用的Python环境进行隔离。
如果不再使用某个 venv
,例如 project01
,删除它也很简单。首先确认该 venv
没有处于 激活
状态,然后直接把整个目录 project01
删掉就行。
Hexo Next 添加 canvas-nest 特效
环境信息
- os: linux 3.10.0-1160.62.1.el7.x86_64 CentOS Linux 7 (Core)
- hexo: 6.2.0
- hexo-cli: 4.3.0
- node: 16.16.0
- Next 8.12.2
安装 canvas-nest
参考 canva-nest 官网 安装
npm install --save canvas-nest.js |
可选操作,主要是为了生成
canvas-nest.js
文件
配置 Next
编辑 next配置文件
,新增以下配置
# background settings |
引入 canvas-nest.js
编辑文件 themes/next/layout/_layout.njk
, 在</body>
之前新增以下内容
{% if theme.canvas_nest.enable %} |
awk 使用示例
awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。
sed 命令使用示例
LVM 逻辑卷管理
LVM是 Logical Volume Manager(逻辑卷管理)的简写,LVM将一个或多个硬盘或分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘或分区加入其中,这样可以实现磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性。与传统的磁盘与分区相比,LVM为计算机提供了更高层次的磁盘存储。它使系统管理员可以更方便的为应用与用户分配存储空间。
/boot
分区不可以在逻辑卷组上,否则bootloader会无法读取.
sftp 服务常用配置说明
sftp 是 Secure File Transfer Protocol 的缩写,安全文件传送协议。可以为传输文件提供一种安全的加密方法。SFTP 为 SSH 的一部分,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的 FTP 要低得多,如果您对网络安全性要求更高时,可以使用 SFTP 代替 FTP。默认ssh启用了sftp,只要可登陆系统的用户(/bin/bash)就可登陆,登陆后目录无限制,可任意切换其他目录。为了安全起见,可以配置sshd以限制sftp登录用户的权限。最好将登陆后用户限制在指定目录,无法切换到外部目录