常用内置模块--logginghashlib
Posted zhangbingsheng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常用内置模块--logginghashlib相关的知识,希望对你有一定的参考价值。
一、logging模块
1、logging作用
1. 控制日志级别
2. 控制日志格式
3. 控制输出的目标为文件
2、日志级别
1 logging.debug(‘debug日志‘) # 10 2 logging.info(‘info日志‘) # 20 3 logging.warning(‘warning日志‘) #30 4 logging.error(‘error日志‘)#40 5 logging.critical(‘critical日志‘) #50
3、示例
import logging # 1. logger对象: 负责生产各种级别的日志 logger1 = logging.getLogger(‘用户交易‘) # 日志名用来标识日志的与什么业务有关 # 2. filter对象: 过滤日志(很少使用) # 3. handler对象: 控制日志输出目标位置,以及编码标准 fh1 = logging.FileHandler(‘a1.log‘,encoding=‘utf-8‘) fh2 = logging.FileHandler(‘a2.log‘,encoding=‘utf-8‘) ch = logging.StreamHandler() # 4. formmater对象:控制日志的格式 formatter1 = logging.Formatter( fmt=‘%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s‘, datefmt=‘%Y-%m-%d %H:%M:%S %p‘ ) formatter2 = logging.Formatter( fmt=‘%(asctime)s - %(levelname)s : %(message)s‘, datefmt=‘%Y-%m-%d %H:%M:%S %p‘ ) # 5. 绑定logger对象与handler对象 logger1.addHandler(fh1) logger1.addHandler(fh2) logger1.addHandler(ch) # 6. 绑定handler对象与formatter对象 fh1.setFormatter(formatter1) fh2.setFormatter(formatter1) ch.setFormatter(formatter2) # 7. 设置日志级别,有logger对象与handler对象两层关卡,必须都放行最终日志才会放行,通常二者级别相同 logger1.setLevel(10) fh1.setLevel(10) fh2.setLevel(10) ch.setLevel(10) # 8. 使用logger对象产生日志 logger1.info(‘ffffffff‘)
4、log配置字典
LOGGING_DIC = { ‘version‘: 1, ‘disable_existing_loggers‘: False, ‘formatters‘: { ‘standard‘: { ‘format‘: standard_format }, ‘simple‘: { ‘format‘: simple_format }, }, ‘filters‘: {}, ‘handlers‘: { #打印到终端的日志 ‘ch‘: { ‘level‘: ‘DEBUG‘, ‘class‘: ‘logging.StreamHandler‘, # 打印到终端 ‘formatter‘: ‘simple‘ }, #打印到a1.log文件的日志 ‘fh1‘: { ‘level‘: ‘DEBUG‘, ‘class‘: ‘logging.FileHandler‘, # 保存到文件 ‘formatter‘: ‘standard‘, ‘filename‘: fh1_path, # 日志文件的路径 ‘encoding‘: ‘utf-8‘, # 日志文件的编码,再也不用担心中文log乱码了 }, # 打印到a2.log文件的日志 ‘fh2‘: { ‘level‘: ‘DEBUG‘, ‘class‘: ‘logging.FileHandler‘, # 保存到文件 ‘formatter‘: ‘simple‘, ‘filename‘: fh2_path, # 日志文件的路径 ‘encoding‘: ‘utf-8‘, # 日志文件的编码,再也不用担心中文log乱码了 }, }, ‘loggers‘: { ‘‘: { ‘handlers‘: [‘fh1‘, ‘fh2‘, ‘ch‘], ‘level‘: ‘DEBUG‘, }, }, }
logging.config.dictConfig(settings.LOGGING_DIC) logger1=logging.getLogger(‘用户交易‘) #logger1-> fh1,fh2,ch logger1.info(‘复古风刚刚兴起‘) logger2=logging.getLogger(‘用户权限‘) #logger2-> fh1,fh2,ch logger2.error(‘TOm没有执行权限‘)
二、hashlib模块
十 hashlib模块 # 1、什么叫hash:hash是一种算法(3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384,
SHA512 ,MD5 算法),该算法接受传入的内容,经过运算得到一串hash值 # 2、hash值的特点是: #2.1 只要传入的内容一样,得到的hash值必然一样=====>要用明文传输密码文件完整性校验 #2.2 不能由hash值返解成内容=======》把密码做成hash值,不应该在网络传输明文密码 #2.3 只要使用的hash算法不变,无论校验的内容有多大,得到的hash值长度是固定的
hash算法就像一座工厂,工厂接收你送来的原材料(可以用m.update()为工厂运送原材料),经过加工返回的产品就是hash值
import hashlib # 方法一、 # 1. 造出一个hash工厂 m = hashlib.md5() #=hashlib.sha256() # 2. 给工厂运送原材料 m.update(‘hello_baby‘.encode(‘utf-8‘)) # 必须是bytes类型 m.update(‘love_you‘.encode(‘utf-8‘)) # 3. 产出产品 print(m.hexdigest()) # 43a09074cc658f190d053f223dcb4497 # 方法二、 # 1. 造出一个hash工厂 m = hashlib.md5(‘hello_baby‘.encode(‘utf-8‘)) # 2. 给工厂运送原材料 m.update(‘love_you‘.encode(‘utf-8‘)) # 3. 产出产品 print(m.hexdigest()) # 43a09074cc658f190d053f223dcb4497
# 一、文件校验 m = hashlib.md5() with open(‘test.txt‘,‘rb‘) as f: for line in f: m.update(line) print(m.hexdigest()) # 二、密码加密 password = input(‘>>:‘).strip() m = hashlib.md5() m.update(password.encode(‘utf-8‘)) print(m.hexdigest()) # 密码加盐处理思想,可以在用户输入的密码中加入其他的字符,例如: password = input(‘>>:‘).strip() m = hashlib.md5() m.update(‘天王盖地虎‘.encode(‘utf-8‘)) # 进行加盐处理 m.update(password.encode(‘utf-8‘)) print(m.hexdigest())
# hmac 模块,用于强制性的加盐处理 import hmac m = hmac.new(‘宝塔镇河妖‘.encode(‘utf-8‘)) # new(必须要传入位置参数) m.update(‘abc154728‘.encode(‘utf-8‘)) print(m.hexdigest())
以上是关于常用内置模块--logginghashlib的主要内容,如果未能解决你的问题,请参考以下文章