django中介軟體解析:
新建檔案log_middleware.py
settings.py裡中介軟體配置最後一行加入你新寫的中介軟體import time
import json
import urllib.parse
# 獲取日誌logger
import logging
logger = logging.getlogger(__name__)
class middlewaremixin(object):
def __init__(self, get_response=none):
self.get_response = get_response
super(middlewaremixin, self).__init__()
def __call__(self, request):
response = none
if hasattr(self, 'process_request'):
response = self.process_request(request)
if not response:
response = self.get_response(request)
if hasattr(self, 'process_response'):
response = self.process_response(request, response)
return response
class logmiddle(middlewaremixin):
# 日誌處理中介軟體
def process_request(self, request):
# 存放請求過來時的時間
request.init_time = time.time()
return none
def process_response(self, request, response):
try:
# 耗時
localtime = time.strftime("%y-%m-%d %h:%m:%s", time.localtime())
# 請求路徑
path = request.path
# 請求方式
method = request.method
# 響應狀態碼
status_code = response.status_code
# 響應內容
content = response.content
# 記錄資訊
content = str(content.decode('utf-8'))
content = urllib.parse.unquote(content)
content = (json.loads(content))
logger.info("start")
except exception as e:
localtime = time.strftime("%y-%m-%d %h:%m:%s", time.localtime())
# 請求路徑
path = request.path
# 請求方式
method = request.method
# 響應狀態碼
status_code = response.status_code
# 響應內容
try:
content = response.content
message = '%s %s %s %s %s %s' % (localtime, path, method, status_code,e, content)
logger.error(message)
except exception as e:
print(e)
content = response.streaming_content
return response
推薦settings.py下方加入log的配置middleware_classes = (
'django.contrib.sessions.middleware.sessionmiddleware',
'django.middleware.common.commonmiddleware',
'django.middleware.csrf.csrfviewmiddleware',
'django.contrib.auth.middleware.authenticationmiddleware',
'django.contrib.auth.middleware.sessionauthenticationmiddleware',
'django.contrib.messages.middleware.messagemiddleware',
'django.middleware.clickjacking.xframeoptionsmiddleware',
'django.middleware.security.securitymiddleware',
'yourdirname.log_middleware.logmiddle',
)
views功能函式裡也可以寫入logbase_log_dir = os.path.join(base_dir, "logs")
# 如過位址不存在,則自動建立log資料夾
if not os.path.isdir(base_log_dir):
os.mkdir(base_log_dir)
logging =
},'handlers': ,
'console':
},'formatters':
}}
開啟伺服器,進行訪問,即可在log檔案看到日誌import logging
logger = logging.getlogger("collect") # 與loggers裡自己定義的名稱對應
def index(requset):
try:
***except exception as e:
logger.error(e)
單個py檔案記錄日誌
from logging.handlers import rotatingfilehandler
# logging
log_formatter = logging.formatter('%(asctime)s %(levelname)s %(funcname)s(%(lineno)d) %(message)s')
logfile = 'console.log'
my_handler = rotatingfilehandler(logfile, mode='a', maxbytes=5*1024*1024,backupcount=5, encoding=none, delay=0)
my_handler.setformatter(log_formatter)
my_handler.setlevel(logging.info)
while true:
try:
pass
except exception as e:
print(e)
continue
django異常日誌 Django中介軟體的四種方法
request是httprequest物件。view func是django即將使用的檢視函式。它是實際的函式物件,而不是函式的名稱作為字串。view args是將傳遞給檢視的位置引數的列表.view kwargs是將傳遞給檢視的關鍵字引數的字典。view args和view kwargs都不包含第...
Django 中介軟體
django中的中介軟體是乙個輕量級 底層的外掛程式系統,可以介入django的請求和響應處理過程,修改django的輸入或輸出。中介軟體的執行過程如下圖所示 django在中介軟體中預置了五個方法,這五個方法的區別在於不同的階段執行,對輸入或輸出進行干預,方法如下 def init self pa...
Django中介軟體
給檢視函式加裝飾器判斷使用者是否登入,把沒有登入的請求跳轉到登入頁面,我們通過給幾個特定檢視函式加裝飾器實現了這個需求,但是這樣做比較繁瑣,用django中的中介軟體會比較簡潔 什麼是中介軟體 中介軟體是幫助我們再檢視函式執行之前和執行之後都可以做一些額外的操作,它本質上就是乙個自定義類,類中定義了...