如果您的限制很低,您可以将每个请求记录在单独的模型中,并手动检查限制。
class RareEndpointRequest(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
endpoint = models.TextField("Endpoint's URL")
created_at = models.DateTimeField(auto_now_add=True)
def some_endpoint(request, *args, **kwargs):
user = request.user
request_count = RareEndpointRequest.objects.filter(
user=user,
endpoint='some_endpoint',
created_at__year=timezone.now().year,
created_at__month=timezone.now().month,
).count()
if request_count > request_limit_by_group(user.group):
return HttpResponse("Rate limit", status=429)
# do your actions
RareEndpointRequest.objects.create(user=user, endpoint='some_endpoint')
return HttpResponse("Some data")