2

我已经使用 Django 创建了一个 REST Web 服务。此 Web 服务有一个日志文件。我想在日志文件中记录所有 Web 服务 (http) 请求。但是,Web 服务请求处理由 Django 完成,我只设置 url-request 处理程序映射并创建请求处理程序(Django 命名法中的视图)。有没有办法在一个中心点记录所有请求,而不需要在其关联的请求处理程序(视图)中记录每个请求?

提前致谢。

4

1 回答 1

2

是的,Django 有一个内置的信号框架。

它允许您注册一个在每次请求开始时调用的函数。

这个文档页面解释了如何一步一步地做到这一点

使用装饰器方法:

from django.core.signals import request_started
from django.dispatch import receiver

@receiver(request_started)
def my_callback(sender, **kwargs):
    # log the request here
    pass

这段代码应该放在哪里?您可以将信号处理和注册代码放在您喜欢的任何地方。但是,您需要确保尽早导入它所在的模块,以便在需要发送任何信号之前注册信号处理。这使您的应用程序的 models.py 成为注册信号处理程序的好地方。

于 2013-02-22T17:14:50.827 回答