def __call__(self, request): # Run only if logger is enabled. if self.DRF_API_LOGGER_DATABASE or self.DRF_API_LOGGER_SIGNAL: url_name = resolve(request.path).url_name namespace = resolve(request.path).namespace # Always skip Admin panel if namespace == 'admin': return self.get_response(request) # Skip for url name if url_name in self.DRF_API_LOGGER_SKIP_URL_NAME: return self.get_response(request) # Skip entire app using namespace if namespace in self.DRF_API_LOGGER_SKIP_NAMESPACE: return self.get_response(request) path = bleach.clean(request.get_full_path()) start_time = time.time() request_data = '' try: request_data = json.loads(request.body) if request.body else '' except: pass # Code to be executed for each request before # the view (and later middleware) are called. response = self.get_response(request) # Code to be executed for each request/response after # the view is called. headers = get_headers(request=request) method = request.method if response['content-type'] == 'application/json': if getattr(response, 'streaming', False): response_body = '** Streaming **' else: response_body = json.loads(response.content) else: response_body = '** Not JSON **' protocol = 'http' if request.is_secure(): protocol = 'https' host = request.META['HTTP_HOST'] api = '%s://%s%s' % ( protocol, host, path, ) data = dict(api=api, headers=headers, body=request_data, method=method, client_ip_address=get_client_ip(request), response=response_body, status_code=response.status_code, execution_time=time.time() - start_time) if self.DRF_API_LOGGER_DATABASE: if LOGGER_THREAD: d = data.copy() d['headers'] = json.dumps(d['headers'], indent=4) if request_data: d['body'] = json.dumps(d['body'], indent=4) d['response'] = json.dumps(d['response'], indent=4) LOGGER_THREAD.put_log_data(data=d) if self.DRF_API_LOGGER_SIGNAL: API_LOGGER_SIGNAL.listen(**data) else: response = self.get_response(request) return response
def __call__(self, request): # Run only if logger is enabled. if self.DRF_API_LOGGER_DATABASE or self.DRF_API_LOGGER_SIGNAL: url_name = resolve(request.path).url_name namespace = resolve(request.path).namespace # Always skip Admin panel if namespace == 'admin': return self.get_response(request) # Skip for url name if url_name in self.DRF_API_LOGGER_SKIP_URL_NAME: return self.get_response(request) # Skip entire app using namespace if namespace in self.DRF_API_LOGGER_SKIP_NAMESPACE: return self.get_response(request) start_time = time.time() request_data = '' try: request_data = json.loads(request.body) if request.body else '' except: pass # Code to be executed for each request before # the view (and later middleware) are called. response = self.get_response(request) # Code to be executed for each request/response after # the view is called. headers = get_headers(request=request) method = request.method if 'content-type' in response and response[ 'content-type'] == 'application/json': if getattr(response, 'streaming', False): response_body = '** Streaming **' else: if type(response.content) == bytes: response_body = json.loads(response.content.decode()) else: response_body = json.loads(response.content) else: response_body = '** Not JSON **' if self.DRF_API_LOGGER_PATH_TYPE == 'ABSOLUTE': api = request.build_absolute_uri() elif self.DRF_API_LOGGER_PATH_TYPE == 'FULL_PATH': api = request.get_full_path() elif self.DRF_API_LOGGER_PATH_TYPE == 'RAW_URI': api = request.get_raw_uri() else: api = request.build_absolute_uri() data = dict(api=api, headers=headers, body=request_data, method=method, client_ip_address=get_client_ip(request), response=response_body, status_code=response.status_code, execution_time=time.time() - start_time, added_on=timezone.now()) if self.DRF_API_LOGGER_DATABASE: if LOGGER_THREAD: d = data.copy() d['headers'] = json.dumps(d['headers'], indent=4) if request_data: d['body'] = json.dumps(d['body'], indent=4) d['response'] = json.dumps(d['response'], indent=4) LOGGER_THREAD.put_log_data(data=d) if self.DRF_API_LOGGER_SIGNAL: API_LOGGER_SIGNAL.listen(**data) else: response = self.get_response(request) return response