Сведения о вопросе

Виктор

14:11, 16th March, 2022

05:49, 3rd April, 2022

Теги

django   python  

middleware которое будет возвращать ошибку если за последние n секунд было больше k запросов c одного ip адреса

Просмотров: 2883   Ответов: 0

Здравствуйте! Начал изучать Django, здесь встала задачка как реализовать миддлвер, что бы возвращал исключение если за последние n секунд было больше k запросов c одного ip адреса.

На сколько смог додуматься, код ниже:

class FilterIPMiddlewareCountTime:

    def __init__(self, get_request):
        self.get_request = get_request
        self._count_request = 3
        self._total = 0
        self._time_request = time.time()

    def __call__(self, response):

        answer_ips = ['127.0.0.1']
        ip = response.META.get("REMOTE_ADDR")

        if ip not in answer_ips:
            raise PermissionDenied()

        t1 = time.time()
        request = self.get_request(response)
        t2 = time.time()
        self._total += t2 - t1
        print('{: ^15}  {}'.format('TOTAL: ', self._total))
        print('{: ^15}  {}'.format('COUNT:', self._count_request))
        
        if self._count_request > self._total:
            self._total = 0
            raise PermissionDenied()
        return request



Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться