如何拦截Django中对DB的所有读取查询?

时间:2017-02-27 08:42:54

标签: python django signals

我需要拦截所有对DB的查询并将它们写入文件日志。 因此,如果像DELETE,UPDATE和CREATE这样的基本操作可以拦截信号框架。但是READ查询怎么样?我怎样才能用信号捕捉它们?

2 个答案:

答案 0 :(得分:1)

我认为django已经使用它的日志框架做到了这一点。如果要仅专门记录数据库查询。 您可以在设置中尝试以下操作。

LOGGING = {
    'handlers': {
        'query': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': 'logs/query.log',
            'formatter': 'verbose'
        },
    },
    'loggers': {
        'django.db.backends': {
            'handlers': ['query'],
            'propagate': False,
            'level': 'DEBUG',
        },
    }
}

答案 1 :(得分:0)

另一种方法是创建自定义中间件,并在其中处理查询

<button onclick="switchLayers()">Switch layers</button>
<div id="container">
  <div id="layer1" class="layer"></div>
  <div id="layer2" class="layer"></div>
</div>