django 记录日志到数据库

这篇具有很好参考价值的文章主要介绍了django 记录日志到数据库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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名单

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模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Django中利用Admin后台实现Excel/CSV的导入更新数据库和导出数据到Excel/CSV

    本文基于Django自带的admin 后台实现Excel,csv,Json等格式文件的导入并更新后台数据库。 核心是引入 django-import-export 模块。 我们先创建一个app:app01 python manage.py startapp app01 然后在app01文件夹下的models.py 中写入如下模型数据: 指定清华镜像会快很多 修改两处: 注册import_exp

    2023年04月09日
    浏览(48)
  • 使用Django数据库模型中的ForeignKey()形成数据表记录的父子层次结构

    可以把ForeignKey()的第1个参数设置为值 “self” 实际形成数据表记录的父子层次结构。 下面是一个简单的实例: 在文件 E:Python_projectP_001myshop-testmyshopapp1models.py 中写入下面的代码: 启动数据库… 然后执行数据库迁移指令: 接下来在文件 E:Python_projectP_001myshop-testmyshop

    2024年02月16日
    浏览(70)
  • Django学习记录:使用ORM操作MySQL数据库并完成数据的增删改查

    数据库操作 MySQL数据库+pymysql Django开发操作数据库更简单,内部提供了ORM框架。 安装第三方模块 ORM可以做的事: 1、创建、修改、删除数据库中的表(不用写SQL语句)。【无法创建数据库】 2、操作表中的数据(不用写SQL语句)。 1、自己创建数据库 1)启动MySQL服务 2)自带

    2024年02月14日
    浏览(63)
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库

    记录日志为文档 记录日志到数据库

    2024年02月20日
    浏览(57)
  • Django的mysql数据库问题:同一个模型(同一张表)中的不同记录也是可以相互关联的【使用“自引用关系”】

    是的,确实可以在Django的模型中使用外键来建立同一模型中不同记录之间的关联关系。这样的关联关系被称为自引用关系(self-referential relationship)或者自关联关系。通过在模型中定义外键字段,你可以使模型的实例与同一模型中的其他实例产生关联。 在Django中,这通常通过

    2024年01月18日
    浏览(65)
  • 【数据库】将excel数据导入mysql数据库

    环境:Windows10 mysql8以上 将你要导入的excel表另存为txt格式 打开txt格式文件,删除表头行并另存为并更改编码方式(由于与数据库的编码不同,会导致导入报错)   通过命令行登录数据库 win+r cmd进入  进入装mysql的目录位置(进入到bin目录)  输入命令进入数据库,注意由于

    2024年02月14日
    浏览(58)
  • 【Web开发 | Django】数据库分流之道:探索Django多数据库路由最佳实践

    🤵‍♂️ 个人主页: @AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!🐱‍🏍 🙋‍♂️声明:本人目前大学就读于大二,研究兴趣方向人工智能硬件(虽然硬件还没开始玩,但一直

    2024年02月07日
    浏览(96)
  • easyExcel模板数据导入数据库

    最近项目中需要用到Excel表格的上传下载功能,于是选择了EasyExcel这款工具,总的来说非常的好用,下面就做一个简单的演示。 官方文档地址   EasyExcel · 语雀 Alibaba Easy Excel - 简单、省内存的Java解析Excel工具 | 首页 pom.xml 中需要添加的依赖 这里用到了  @ExcelProperty  注解,这

    2023年04月08日
    浏览(54)
  • Django迁移数据到指定数据库

    在Django中,你可以配置多个数据库,并且可以为不同的操作指定使用不同的数据库。这意味着你确实可以同时将数据保存到SQLite和MySQL数据库中,但这需要你在代码中明确指定每次数据库操作应使用哪个数据库。 首先,你需要在Django设置文件 settings.py 中定义两个数据库连接,

    2024年02月01日
    浏览(43)
  • Django dumpdata 迁移数据库数据

    本文介绍两种常用的 Django 服务迁移数据方法。 这两种方法都需要在新的服务器部署好数据库,创建好相应的数据库表和用户以后再进行。 针对数据量不是很大的项目,可以使用此方法,操作起来比较简单。 通过连接旧的数据库运行dumpdata导出命令导出数据。 连接上新的数

    2024年02月17日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包