logging:
功能完善的日志模块
import logging
#日志的级别
logging.debug("这是个调试信息")#级别10
#常规信息
logging.info("常规信息")#20
#警告信息
logging.warning("警告信息")#30
#错误信息
logging.error("错误信息")#40
#严重错误
logging.critical("严重错误")#50
#在logging模块中有对应的常量来标识级别
#在默认情况下 默认的级别 30 WARING 日志输出位置是控制台
#2.自定义日志的配置
logging.basicConfig(
filename="a.log",
filemode="at",
level=10,
format="%(asctime)s %(levelname)s %(funcName)s %(lineno)s %(message)s",
datefmt="%Y-%m-%d %X %p"
)
logging.debug("这是个错误信息")
#日志模块的四个核心角色
'''
1.logger 日志生成器(生成后需要看一下级别 当前生成级别比设置的级别低 就不往下进行了)
2.filter 过滤器(根据指定的过滤逻辑进行过滤)->不常用
3.handler 处理器(按照formatter指定的格式输出)
4.formatter 格式处理器 控制输出格式
'''
#1.创建一个日志生成器
mylog=logging.getLogger("mylog")
#设置生成器级别
mylog.setLevel(logging.DEBUG)
#2.搞一个日志处理器
fh=logging.FileHandler("b.log",encoding="utf-8")
#3.搞一个格式处理器
fm=logging.Formatter("%(levelname)s %(funcName)s %(lineno)s %(message)s",
datefmt="%Y-%m-%d %X %p")
#4.将三个对象进行关联
mylog.addHandler(fh)
fh.setFormatter(fm)
#测试
mylog.debug("mylog 的 测试4")
#日志的继承
logg1=logging.getLogger("father")
logg2=logging.getLogger("father.son")
logg3=logging.getLogger("father.son.grandson")
#默认值Ture 标识 有继承关系 当子日记产生日志时候 给它的父级及上级都发一份
logg3.propagate=False
fh=logging.FileHandler("b.log",encoding="utf-8")
fm=logging.Formatter("%(levelname)s %(funcName)s %(lineno)s %(message)s",
datefmt="%Y-%m-%d %X %p")
logg1.addHandler(fh)
logg2.addHandler(fh)
logg3.addHandler(fh)
fh.setFormatter(fm)
logg2.warning("father.son.log")
import logging.config
#以字典来配置日志 传入一个字典对象 就不需要再在上面编写一堆代码了
logging.config.dictConfig()
#流处理器
log1=logging.getLogger("a")
#输出到文件
fh=logging.FileHandler("c.log",encoding="utf-8")
#输出到控制台
sh=logging.StreamHandler()
log1.addHandler(sh)
fm=logging.Formatter("%(levelname)s %(funcName)s %(lineno)s %(message)s",
datefmt="%Y-%m-%d %X %p")
sh.setFormatter(fm)
log1.waring("测试!")
import conf.settings
import logging.config
def log():
logging.config.dictConfig(conf.settings.LOGGING_DIC)
loger=logging.getLogger("mylog")
loger.warning("警告!")
hashlib:
hash算法相关的库
算法怎么算不需要关心
我们关心的重点是 算出来的结果有什么用
"""
hash lib
hash 是一种算法 是将一个任意长度的数据 根据计算 得到一个固定长度特征码
特征:不同输入 可能会有相同的结果(几率比较小)
相同的输入 必然得到相同结果
由于散列(特征)的性质 从原理来看是不可能反解
1 . 用来验证两个输入的数据是否一致
密码验证:
123321 jahsaishajhsjahjas
chient 加密后结果 server 拿到加密后
2 . 验证数据是否被篡改 比如游戏安装包 有没有被改过
为了防止别人撞库 可以用update进行加严处理
"""
# 撞库破解的原理 有人事先把常见的明文和密文的对应关系 存到数据库
#运气好可以查到
import hashlib
m=hashlib.md5("1yanhui23".encode("utf-8"))
print(m.hexdigest())
#加严
m.update("dsdfgsfzds".encode("utf-8"))
print(m.hexdigest())
#定义时直接加严
import hmac
h=hmac.new("dsdfgsfzds".encode("utf-8"))
h.update("123".encode("utf-8"))
print(h.hexdigest())