python模块之hashlib模块、logging模块、第三方模块
一、hashlib加密模块
1.加密:把明文数据通过一系列算法变成密文数据,目的是为了数据安全。加密之后的密文数据是没有办法反解密变成明文数据的。一般涉及要用户密码存储,都是密文的形式,只有用户知道明文是什么,程序员也无法知道的,如果存储的数据泄露也没办法破解。
2.加密算法:md系列、sha系列、base系列、hmac系列
3.基本使用:import hashlib 常用md5
4.只要明文是相同的,加密后的密文也相同,跟传递方式没有关系。
5.密文越长表示内部对应的算法越复杂,越难被正面破解。算法越复杂需要消耗的资源越多,基于网络发送需要占据的数据也越大。具体使用什么算法要取决于项目,一般来说md5就可以了。
6.加盐处理:在对明文数据做加密处理过程中添加一些干扰项。
7.动态加盐:在对明文数据做加密处理过程中添加一些变化的干扰项。比如当前时间、用户名的一部分,随机字符串等等。
8.校验文件一致性:如果文件特别大的情况下,全部做加密相当耗时耗资源,这时候就可以做切片读取的方式。比特流技术、断电续传技术
import hashlib # 调用模块
# 1.先确认加密类型,md5常用
md5 = hashlib.md5()
# 2.把明文数据传给加密算法(update只能接受bytes类型的数据)
md5.update('数据'.encode('utf8')) # 如果是数字或者字母,可以写成md5.update(b'字符')
# 获取加密后的密文数据
res = md5.hexdigest()
print(res)
二、logging日志模块
1.日志记录有五个等级,从上到下重要性越来越高,默认记录的级别在30以上:import logging
logging.debug() # 10
logging.info() # 20
logging.warning() # 30
logging.error() # 40
logging.critical() # 50
2.简单使用:import logging(有模板可以直接套用)
import logging
file_handler = logging.FileHandler(filename='x1.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('日志模块很好学 不要自己吓自己')
3.如何控制日志的输出位置,不同的位置如何做到不同格式。这时候就需要使用到日志的四大对象了。
1.logger对象:负责产生日志
2.filter对象:负责过滤日志(一般用不上,直接忽略)
3.handler对象:负责日志产生的位置
4.Formatter对象:负责日志的格式
import logging # 导入模块
# 1.日志对象
logger = logging.getLogger('转账记录')
# 2.handler对象:负责日志产生的位置
hd1 = logging.FileHandler('a1.log', encoding='utf') # 产生到文件a1
hd2 = logging.FileHandler(r'a2.log', encoding='utf8') # 产生到文件a2
hd3 = logging.StreamHandler() # 产生到终端
# 3.负责格式
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',
)
# 4.把日志绑定handler对象即确认日志对象产生的位置
logger.addHandler(hd1)
logger.addHandler(hd2)
logger.addHandler(hd3)
# 5.绑定格式 formatter对象
hd1.setFormatter(fm1)
hd2.setFormatter(fm2)
hd3.setFormatter(fm1)
# 6.设置日志等级
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' # 这里直接定死一个路径了,后续应该用代码获取路径
# 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配置
},
}
# 使用配置字典
logging.config.dictConfig(LOGGING_DIC) # 自动加载字典中的配置,用到模块logging.config
logger1 = logging.getLogger('对象名')
logger1.debug('加油')
三、第三方模块
1.第三方模块不是python自带的,需要基于网络下载后才能导入使用。
2.下载第三方模块的两种方式:
方式1:命令行借助pip工具 在python解释器文件夹找到这个pip文件夹,把路径添加到操作系统的环境变量中。默认下载源路径是官网
pip3 install 模块名 # 不知道版本号的话默认下载最新版
pip3 install 模块名==版本号 # 指定版本下载
pip3 install -i 仓库地址 # 临时切换下载模块的源路径
想要永久修改下载模块的路径需要修改python解释器源文件
方式2:pycharm快捷方式
settings--project--python interpreter--双击package下面或者有右边的+号--搜索模块名。如果需要切换下载源路径就点manageg管理添加即可。
3.切换下载的源:
pip命令默认下载的渠道是国外的python官网(有时候会非常的慢)
我们可以切换下载的源(仓库)
(1)阿里云 http://mirrors.aliyun.com/pypi/simple/
(2)豆瓣 http://pypi.douban.com/simple/
(3)清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
(4)中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/
(5)华中科技大学http://pypi.hustunique.com/
4.下载报错:下载第三方模块可能报错的情况及解决措施
1.报错的提示信息中含有关键字timeout
原因:网络不稳定
措施:再次尝试 或者切换更加稳定的网络
2.找不到pip命令
添加环境变量
3.没有任何的关键字 不同的模块报不同的错
原因:模块需要特定的计算机环境
措施:拷贝报错信息 打开浏览器 百度搜索即可
pip下载某个模块报错错误信息