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下載某個模組報錯錯誤資訊