1、导入相应插件
from django.utils.deprecation import MiddlewareMixin
from middlewares.models import OpLogs, AccessTimeOutLogs
2、创建middlewares的app,并创建OpLogs, AccessTimeOutLogs数据模型
class OpLog(MiddlewareMixin):
__exclude_urls = [‘index/’] # 定义不需要记录日志的url名单文章来源:https://www.toymoban.com/news/detail-433662.html
def __init__(self, *args):
super(OpLog, self).__init__(*args)
self.start_time = None # 开始时间
self.end_time = None # 响应时间
self.data = {} # dict数据
def process_request(self, request):
"""
请求进入
:param request: 请求对象
:return:
"""
self.start_time = time.time() # 开始时间
re_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) # 请求时间(北京)
# 请求IP
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
if x_forwarded_for:
# 如果有代理,获取真实IP
re_ip = x_forwarded_for.split(",")[0]
else:
re_ip = request.META.get('REMOTE_ADDR')
# 请求方法
re_method = request.method
# 请求参数
re_content = request.GET if re_method == 'GET' else request.POST
if re_content:
# 筛选空参数
re_content = json.dumps(re_content)
else:
re_content = None
self.data.update(
{
're_time': re_time, # 请求时间
're_url': request.path, # 请求url
're_method': re_method, # 请求方法
're_ip': re_ip, # 请求IP
're_content': re_content, # 请求参数
're_user': request.user.username # 操作人(需修改),网站登录用户
# 're_user': 'AnonymousUser' # 匿名操作用户测试
}
)
def process_response(self, request, response):
"""
响应返回
:param request: 请求对象
:param response: 响应对象
:return: response
"""
# 请求url在 exclude_urls中,直接return,不保存操作日志记录
for url in self.__exclude_urls:
if url in self.data.get('re_url'):
return response
# 获取响应数据字符串(多用于API, 返回JSON字符串)
rp_content = response.content.decode()
self.data['rp_content'] = rp_content
# 耗时
self.end_time = time.time() # 响应时间
access_time = self.end_time - self.start_time
self.data['access_time'] = round(access_time * 1000) # 耗时毫秒/ms
# 耗时大于3s的请求,单独记录 (可将时间阈值设置在settings中,实现可配置化)
if self.data.get('access_time') > 3 * 1000:
AccessTimeOutLogs.objects.create(**self.data) # 超时操作日志入库db
# print(self.data)
OpLogs.objects.create(**self.data) # 操作日志入库db
return response
3、在setting中引用 middlewares
INSTALLED_APPS = [
‘simpleui’,
‘import_export’,
‘django.contrib.admin’,
‘django.contrib.auth’,
‘django.contrib.contenttypes’,
‘django.contrib.sessions’,
‘django.contrib.messages’,
‘django.contrib.staticfiles’,
‘middlewares’,
‘Manpage’,
]文章来源地址https://www.toymoban.com/news/detail-433662.html
到了这里,关于django 记录日志到数据库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!