Django REST Framework提供了许多信号,用于在API的生命周期中执行自定义的代码。
一、request_started信号
request_started信号在Django REST Framework处理API请求时触发。它可以用于记录请求日志、统计API调用次数等。下面是一个request_started信号的示例:
代码语言:javascript复制from django.dispatch import receiver
from rest_framework import signals
@receiver(signals.request_started)
def log_request(sender, **kwargs):
request = kwargs['request']
print(f"Request to {request.path} received")
上面的代码定义了一个名为log_request的函数,并将其注册为request_started信号处理器。当API收到请求时,log_request函数将被调用。在log_request函数中,我们可以记录请求路径、请求方法、请求参数等信息。
二、request_finished信号
request_finished信号在Django REST Framework处理API请求后触发。它可以用于记录请求时间、统计API调用次数等。下面是一个request_finished信号的示例:
代码语言:javascript复制from django.dispatch import receiver
from rest_framework import signals
import time
@receiver(signals.request_finished)
def log_request(sender, **kwargs):
request = kwargs['request']
response = kwargs['response']
duration = time.time() - request._start_time
print(f"Request to {request.path} took {duration:.2f} seconds")
上面的代码定义了一个名为log_request的函数,并将其注册为request_finished信号处理器。当API请求处理完成后,log_request函数将被调用。在log_request函数中,我们可以记录请求路径、请求时间等信息。