进入python的世界_day22_python基础——hashlib模块、subprocess模块、logging日志模块
一、哈希加密模块——hashlib
1.缘由
我们平时登录比如百度啊,腾讯视频啊,输入账号密码成功了就会登录上,如果有人半路截获了这个账号密码,那我们密码就泄露了,所以得把这个密码加密成别人看不懂的样子,有点类似小时候冒险小虎队的解密,一般网址用的加密都是哈希加密基本可以保证数据安全
2.用途
用途1——用于密码密文传输与验证
用途2——用于文件完整性校验
2.方式
加密的方法很多,根据算法不同产生加密数据的长短也不同,一般是生成一大串没有规律的数字、字母、符号组成到一起,注意无论校验的内容有多大,得到的hash值长度是固定的
目前常见的加密算法:
md5、base64、各种sha
3.实操
!!!先给python安装hashlib模块哦~
import hashlib
a = hashlib.md5() # 指定一下加密算法,变量名随意
a.update() # 往里面传要加密的数据,注意,最好转字节形式
# 例如 : a.update(bytes(f'{}', encoding='utf8'))
res = a.hexdigest() # 开始加密,加密的结果拿个变量名接收下
print(res) # 可以打印看下,也可以把这变量名拿着到处用了
4.拼凑
没开始执行加密前,可以拼凑加密内容,有点类似字符串拼接,只要拼出的是一样的东西,拿去加密,得到的结果都是一样的
5.加点难度的加密
正儿八经的加密太小儿科,一般都会加点干扰项
比如说没加密前塞点东西进数据中,,或固定文本或动态内容,这种
手段就称作加盐
6.大文件加密
整个一起加密太耗时间了,可以分段加密,只校验段数处的数据是否一致,段数10+ 20+基本可以完成加密工作
二、subprocess模块
可以模拟操作系统终端 执行命令并获取结果,主要是应用网络编程,目前还不涉及,仅作了解
import subprocess
res = subprocess.Popen(
'asdas', # 操作系统要执行的命令
shell=True, # 固定配置
stdin=subprocess.PIPE, # 输入命令
stdout=subprocess.PIPE, # 输出结果
)
print('正确结果', res.stdout.read().decode('gbk')) # 获取操作系统执行命令之后的正确结果
print('错误结果', res.stderr) # 获取操作系统执行命令之后的错误结果
三、logging 日志模块
1.介绍
程序的一种记录行为,可以记录正常的程序访问,还可能有错误、警告等信息的输出
学了这个模块后,用户反馈就别用直接print了
2.分级

debug 调试debug 程序真正上线后不用再输出
info 正常的一些信息
warning 当前有可能出现错误
error 已经出现错误
critical 错误很严重
默认情况下只显示了大于等于WARNING级别的日志
3.基本配置
import logging
logging.basicConfig(
# 1.日志输出位置:1.终端 2.文件
filename = 'access.log', # 不指定,默认打印到终端
# 指定本质就是A模式打开一个文件存
# 记录日志一般是给运维人员看的
# 2.日志格式
format='%(asctime)s - %(name)s - %(levelname)s - %(module)s: %(message)s',
# 3.时间格式
datefmt='%Y-%m-%d %H:%M:%S %p',
# 4.日志级别
# CRITICAL = 50 #FATAL = CRITICAL
# ERROR = 40
# WARNING = 30 #WARN = WARNING
# INFO = 20
# DEBUG = 10
# NOTSET = 0 #不设置
level=10, # 意思Debug及以上的日志都会输出了
)
定义三种日志输出格式,日志中可能用到的格式化串如下
# %(name)s Logger的名字
# %(levelno)s 数字形式的日志级别
# %(levelname)s 文本形式的日志级别
# %(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
# %(filename)s 调用日志输出函数的模块的文件名
# %(module)s 调用日志输出函数的模块名
# %(funcName)s 调用日志输出函数的函数名
# %(lineno)d 调用日志输出函数的语句所在的代码行
# %(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
# %(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
# %(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
# %(thread)d 线程ID。可能没有
# %(threadName)s 线程名。可能没有
# %(process)d 进程ID。可能没有
# %(message)s用户输出的消息
四、日志配置字典
日志配置应该写到配置文件去,可以想想如果按照规范目录开发程序,应该把日志配置放到何处呢?
写在前头:这个字典很长,不用记,就当作很简单的字典,会用就行
重点关注:formatters 、handlers、loggers
格式
import logging
import logging.config
standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
'[%(levelname)s][%(message)s]' # 其中name为getlogger指定的名字
simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
test_format = '[%(asctime)s] %(message)s'
# 上述为准备
LOGGING_DIC = {
'version': 1,
'disable_existing_loggers': False,
'formatters': { # 键命不能改
'standard': { # 可以自定义
'format': standard_format # 键名不能改,后面随意加自己想要的格式 >>>最好别动这个,在其他地方改该变量名就行
},
'simple': {
'format': simple_format
'test' : {
'format' : test_format
}
},
'filters': {}, # 过滤日志
'handlers': { # 控制日志输出的位置——句柄
# 打印到终端的日志
'console': {
'level': 'DEBUG',# K不能改
'class': 'logging.StreamHandler', # 输出到屏幕
'formatter': 'simple'# 这就关联上前面的simple了
},
# 打印到文件的日志,收集info及以上的日志
'default': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件
'formatter': 'standard',
'filename': logfile_path, # 日志文件
# 获取log文件夹,再拼出log地址
'maxBytes': 1024 * 1024 * 5, # 日志大小 5M
'backupCount': 5,
'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了
},
},
# 接下来应该配置日志生产者
'loggers': {
# logging.getLogger(__name__)拿到的logger配置
'kkk': {
'handlers': ['default', 'console'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
'level': 'DEBUG',
# 这里的级别设置,不冲突上面的接收者
'propagate': True, # 向上(更高level的logger)传递
}, # 当键不存在的情况下 (key设为空字符串)默认都会使用该k:v配置
# '购物车记录': {
# 'handlers': ['default','console'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
# 'level': 'WARNING',
# 'propagate': True, # 向上(更高level的logger)传递
# }, # 当键不存在的情况下 (key设为空字符串)默认都会使用该k:v配置
},
},
}
logging.config.dictConfig(LOGGING_DIC) # 自动加载配置
loggerl = logging.getLogger('xxx')
loggerl.debug('666666')
# >>>估计看懵了,接下来实操一下,会用就行
1.日志配置丢在setting.py文件里
2.新建一个src.py核心业务文件
3.导一下setting
4.导一下logging
5.顺着logging 导入config # 两种都可以导,但是注意调的方 式

浙公网安备 33010602011771号