我使用Django创建了一个REST Web服务。此Web服务具有日志文件。我想在日志文件中记录所有Web服务(http)请求。但是,Web服务请求处理由Django完成,我只设置url-request处理程序映射并创建请求处理程序(Django命名法中的视图)。有没有办法在中心点记录所有请求,而无需在其关联的请求处理程序(视图)中记录每个请求?
提前致谢。
答案 0 :(得分: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成为一个放置信号注册的好地方 处理程序。