為了記錄每次api的訪問時傳入的引數, 以及後端返回的資料, 使用中介軟體, 將所有的資料寫到日誌檔案中.
①在某個應用下建立乙個middleware.py的檔案, 並在配置檔案中註冊該中介軟體
self.start_time = none # 訪問時間
self.end_time = none
def process_request(self, request):
self.start_time = time.time()
def process_response(self, request, response):
time_obj = timeutils()
now_time = time_obj.get_now_time()
api = request.get_full_path() # 1-獲得請求的api
request_method = request.method # 2-獲得請求的方法
input_params = # 3-給請求引數乙個預設值(空列表)
user_id = "test" # 4-給訪問使用者乙個預設值
if request_method == "get":
input_params = request.get.dict()
user_id = request.get.get('user_id')
elif request_method == "post":
input_params = request.post.dict()
user_id = request.post.get('user_id')
"""elif request_method == "put":
input_params = request.body.decode()
'''"""
ret_dict = response.content.decode() # 5-獲得api返回的資料
try:
ret_dict = json.loads(ret_dict) # 6-更改格式 這裡之所以要try, 是因為返回404等介面時,不需要json.loads()
except:
pass
logger.info("\n %s user_id = %s api=%s method=%s" # 7-日誌記錄請求引數和返回結果
"\n %s input=%s "
"\n %s output=%s" % (now_time, user_id, api, request_method, now_time, input_params, now_time, ret_dict))
self.end_time = time.time() # api響應時間
waste_time = self.end_time - self.start_time # 訪問api消耗時間
if waste_time >= 0.3: # 這裡可以自定義乙個時間,作為耗時的標準, 超時的記錄在乙個日誌檔案中, 後期再對api進行優化
logger_time.info('%s, 耗時:%s' % (api, waste_time))
return response
def process_exception(self, request, exception):
api = request.get_full_path()
ret = "伺服器繁忙, 請稍後再試"
logger_error.info("api: %s\n 異常資訊:%s " % (api, exception)) # 還可以捕獲異常, 寫到錯誤日誌裡邊, 測試階段直接把exception返回就可以
return jsonresponse()
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中的中介軟體會比較簡潔 什麼是中介軟體 中介軟體是幫助我們再檢視函式執行之前和執行之後都可以做一些額外的操作,它本質上就是乙個自定義類,類中定義了...