Различные ограничения дросселирования в зависимости от типа пользователя в одном и том же действии одного API

Я разделил свои многочисленные API на 5 различных категорий, теперь я хочу, чтобы лимит дросселирования этих API не был общим для всех. Я хочу иметь разные лимиты для типов пользователей. Например, если это пользователь_1, то лимиты дросселирования должны быть {Category1: 100/hr; Category2: 100/min; Category3 : 10/hr; Category4: 10/min ;Category1: 20/sec;} а если это пользователь_2, то ограничения на прокрутку должны быть {Category1: 230/hr; Category2: 40/min; Category3 : 120/hr; Category4: 15/min ;Category1: 50/sec;}

Я перепробовал множество методов, создавая пользовательский класс, создавая словарь и импортируя overring, но ничего не помогает Вот что я пробовал я закомментировал верхнюю часть, чтобы сделать ее различимой

from rest_framework.throttling import UserRateThrottle,ScopedRateThrottle
# from backend.settings.base import VIEWSET_CATEGORIES
from backend.settings.base import *

# class APIThrottle(ScopedRateThrottle):
#     def allow_request(self, request, view):
#         category = self.determine_category(view)
#         if category:
#             self.set_rate_limit(category)
#         return super().allow_request(request, view)

#     def determine_category(self, view):
#         viewset_path = f"{view.__module__}.{view.__class__.__name__}"
#         return VIEWSET_CATEGORIES.get(viewset_path)

#     def set_rate_limit(self, category):
#         self.scope = category
#         if category == 'category1':
#             self.rate = '5/hour'
#         elif category == 'category2':
#             self.rate = '10/hour'
class ExpectionUserRateThrottle(UserRateThrottle):
    def allow_request(self, request, view):
        if self.rate is None:
            return True
        
        self.key = self.get_cache_key(request, view)
        if self.key is None:
            return True
        
        self.history = self.cache.get(self.key, [])
        self.now = self.timer()
        
        override_rate = settings.REST_FRAMEWORK['OVER_THROTTLE_RATES'].get(
            request.user.username,
            None,)
        if override_rate is not None:
            self.num_requests, self.duration = self.parse_rate(override_rate)


        while self.history and self.history[-1] <= self.now - self.duration:
            self.history.pop()
        if len(self.history) >= self.num_requests:
            return self.throttle_failure()
        return self.throttle_success()
Вернуться на верх