1. 程式人生 > 其它 >python模組之hashlib模組、logging模組、第三方模組

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