hashlib加密模块
# 1.加密就是把明文数据变为密文
# 2.加密的目的是为了保证数据的安全
# 3.加密后的数据是一串没有规律的字符串
# 4.加密后的密文越长说明使用的加密算法(数据的处理过程)越复杂
# 5.常见的加密算法有md5,base64,hmac,sha系列
# 6.加密算法的操作:
import hashlib
# 1.选择加密算法
mb5 = hashlib.md5()
# 2.传入明文数据
md5.update(b'12345') # b 前缀代表的就是bytes python2.x里, b前缀没什么具体意义, 只是为了兼容python3.x的这种写法
# 3.获取加密密文
res = md5.hexdigest()
print(res) # 827ccb0eea8a706c4c34a16891f84e7b
加密算法的补充:
# 1.加密算法不变,如果内容相同,加密后的结果也一定相同。
方式1:一次加密所有,把所有传进去
md5.update(b'hello~world~python~666')
方式2:分多次传入加密
md5.update(b'hello')
md5.update(b'~world')
md5.update(b'~python~666')
两种方式所得的结果是一样的
# 2.加密后的密文是不能进行反解密的
# 3.加盐处理: 在明文里面添加一些额外的干扰项
# 1.选择加密算法
md5 = hashlib.md5()
# 2.传入明文数据
md5.update('公司设置的干扰项'.encode('utf8'))
md5.update(b'hello python')
# 3.获取加密密文
res = md5.hexdigest()
print(res)
# 4.动态加盐: 干扰项是随机变化的
当前的时间,用户名部分都可作为干扰项
# 5.加密实战操作
1.用户密码加密
2.文件安全性校验
3.文件内容一致性校验
4.大文件内容加密 : 对截取的部分内容进行加密即可
subprocess模块
# 模拟操作系统终端,执行命令并获取结果
import subprocess
res = subprocess.Popen(
'pip', # 操作系统执行的命令
shell = True, # 固定配置
stdin = subprocess.PIPE, # 输入命令
stdout = subprocess.PIPE, # 输出结果
)
# print('正确结果',res.stdout.read().decode('gbk')) # 获取操作系统执行命令之后的正确结果
# print('错误结果',res.stderr) # 获取操作系统执行命令之后的错误结果
logging日志模块
1.日志就是记录用户等行为举止的操作
2.日志有五种级别
logging.debug('debug等级') # 10
logging.info('info等级') # 20
logging.warning('warning等级') # 默认从warning级别开始记录日志 30
logging.error('error等级') # 40
logging.critical('critical等级') # 503.日志的代码及基本使用(无需掌握,cv并会修改即可)
import logging
file_handler = logging.FileHandler(filename='l1.log', mode='a', encoding='utf-8', )
logging.basicConfig(
format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S %p',
handlers=[file_handler, ],
level=logging.ERROR
)
logging.error('你好!!!')
4.日志的组成
1).产生日志
2).过滤日志
3).输出日志
4).日志格式
import logging
# 1.日志的产生(准备原材料) logger对象
logger = logging.getLogger('购物车记录')
# 2.日志的过滤(剔除不良品) filter对象:可以忽略,不用使用
# 3.日志的产出(成品) handler对象
handler1 = logging.FileHandler('a1.log', encoding='utf-8') # 输出到文件中
handler2 = logging.FileHandler('a2.log', encoding='utf-8') # 输出到文件中
handler3 = logging.StreamHandler() # 输出到终端
# 4.日志的格式(包装)
fm1 = logging.Formatter(
fmt='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S %p',
)
fm2 = logging.Formatter(
fmt='%(asctime)s - %(name)s: %(message)s',
datefmt='%Y-%m-%d',
)
# 5.给logger对象绑定handler对象
logger.addHandler(handler1)
logger.addHandler(handler2)
logger.addHandler(handler3)
# 6.handler绑定formmate对象
handler1.setFormatter(fm1)
handler2.setFormatter(fm2)
handler3.setFormatter(fm1)
# 7.设置日志等级
logger.setLevel(10)
# 8.记录日志
logger.debug('好好写')
5.日志配置字典
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'
# 自定义文件路径
logfile_path = 'a3.log'
LOGGING_DIC = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'standard': {
'format': standard_format
},
'simple': {
'format': simple_format
},
},
'filters': {}, # 过滤日志
'handlers': {
# 打印到终端的日志
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler', # 打印到屏幕
'formatter': 'simple'
},
# 打印到文件的日志,收集info及以上的日志
'default': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件
'formatter': 'standard',
'filename': logfile_path, # 日志文件
'maxBytes': 1024 * 1024 * 5, # 日志大小 5M
'backupCount': 5,
'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了
},
},
'loggers': {
# logging.getLogger(__name__)拿到的logger配置
'': {
'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) # 自动加载字典中的配置
# logger1 = logging.getLogger('购物车记录')
# logger1.warning('尊敬的VIP客户 晚上好 您又来啦')
# logger1 = logging.getLogger('注册记录')
# logger1.debug('jason注册成功')
logger1 = logging.getLogger('红浪漫顾客消费记录')
logger1.debug('慢男 猛男 骚男')