2013-02-22 167 views
2

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

在此先感谢。

回答

2

是的Django有一个内置的signals框架。

它允许您注册每次请求启动时调用的函数。

This documenation页解释了如何做一步一步

使用装饰方法:

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一个好的地方,把信号 处理程序的注册。